Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL sélectionne les enregistrements dont la somme est supérieure au seuil

Cela semble être adapté pour un ensemble de résultats UNION. Vous devez donc obtenir 2 requêtes (une pour chaque "critère") et joindre leur résultat en utilisant union.

La première requête deviendrait :

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;

Vous avez maintenant besoin de la requête qui sélectionne si la taille est trop 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;

Ensuite, vous souhaitez les combiner dans une seule requête. Comme les deux ont les mêmes champs, vous pouvez simplement "unir" le résultat

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 :Vous aviez "ON f1.id>=f2.id" comme critère de jointure, vous ne savez pas pourquoi le> serait très spécifique à la casse :)