sql >> Databasteknik >  >> RDS >> Mysql

MySQL väljer poster med summa som är större än tröskeln

Detta verkar vara lämpligt för en UNION-resultatuppsättning. Så du måste få 2 frågor (en för varje "kriterier") och gå med i deras resultat med union.

Den första frågan skulle bli:

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;

Nu behöver du frågan som väljer om storleken är för stor:

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;

Därefter vill du kombinera dem i en enda fråga. Eftersom båda har samma fält kan du helt enkelt "förena" resultatet

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:Du hade "ON f1.id>=f2.id" som anslutningskriterier, inte säker på varför> det skulle vara väldigt fallspecifikt :)




  1. Välj från en tabell där inte i en annan

  2. MySQL's now() +1 dag

  3. Räknar antalet utförda frågor

  4. Få standardserievärde efter INSERT inuti PL/pgSQL