Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL seleziona record con una somma maggiore della soglia

Questo sembra essere adatto per un set di risultati UNION. Quindi devi ottenere 2 query (una per ogni "criterio") e unire il loro risultato usando union.

La prima query diventerebbe:

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;

Ora hai bisogno della query che seleziona se la dimensione è troppo 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;

Quindi vuoi combinarli in un'unica query. Poiché entrambi hanno gli stessi campi, puoi semplicemente "unire" il risultato

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:avevi "ON f1.id>=f2.id" come criteri di unione, non sono sicuro del motivo> che sarebbe molto specifico per il caso :)