Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL wählt Datensätze aus, deren Summe größer als der Schwellenwert ist

Dies scheint für eine UNION-Ergebnismenge geeignet zu sein. Sie müssen also 2 Abfragen (eine für jedes "Kriterium") erhalten und ihr Ergebnis mit union verbinden.

Die erste Abfrage würde folgendermaßen aussehen:

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;

Jetzt brauchen Sie die Abfrage, die auswählt, ob die Größe zu groß ist:

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;

Als Nächstes möchten Sie sie in einer einzigen Abfrage kombinieren. Da beide die gleichen Felder haben, können Sie das Ergebnis einfach "vereinigen"

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:Sie hatten "ON f1.id>=f2.id" als Join-Kriterium, nicht sicher, warum das> sehr fallspezifisch wäre :)