Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL seleciona registros com soma maior que o limite


Isso parece ser adequado para um conjunto de resultados UNION. Então você tem que obter 2 consultas (uma para cada "critério") e juntar seu resultado usando união.

A primeira consulta se tornaria:
SELECT f1.user_id, f1.id AS file_id, SUM(f1.fileSize) AS totalSum
FROM files AS f1 
WHERE f1.user_id = 1
GROUP BY f1.id 
HAVING totalSum <= 350000;

Agora você precisa da consulta que seleciona se o tamanho é muito grande:
SELECT f1.user_id, f1.id AS file_id, MAX(f1.fileSize) AS max
FROM files AS f1 
WHERE f1.user_id = 1
GROUP BY f1.id 
HAVING max >= 350000;

Em seguida, você deseja combiná-los em uma única consulta. Como ambos têm os mesmos campos, você pode simplesmente "unir" o resultado
SELECT f1.user_id, f1.id AS file_id, SUM(f1.fileSize) AS totalSum
FROM files AS f1 
WHERE f1.user_id = 1
GROUP BY f1.id 
HAVING totalSum <= 350000
UNION
SELECT f1.user_id, f1.id AS file_id, MAX(f1.fileSize) AS max
FROM files AS f1 
WHERE f1.user_id = 1
GROUP BY f1.id 
HAVING max >= 350000;

PS:Você tinha "ON f1.id>=f2.id" como critério de junção, não sei por que> isso seria muito específico para cada caso :)