sql >> Databáze >  >> RDS >> Mysql

MySQL vybírá záznamy se součtem větším než prahová hodnota

Zdá se, že je to vhodné pro sadu výsledků UNION. Musíte tedy získat 2 dotazy (jeden pro každé „kritéria“) a spojit jejich výsledek pomocí sjednocení.

První dotaz by byl:

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;

Nyní potřebujete dotaz, který vybere, zda je velikost příliš velká:

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ále je chcete zkombinovat do jednoho dotazu. Protože obě mají stejná pole, můžete výsledek jednoduše „sjednotit“

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:Jako kritérium spojení jste měli "ON f1.id>=f2.id", nejste si jisti, proč by> to bylo velmi specifické pro případ :)




  1. Jak zobrazit všechna oprávnění od uživatele v oracle?

  2. Stránka byla napadena pomocí SQL Injection

  3. Jak vytvořit tabulku, pouze pokud v SQLite neexistuje

  4. Je INSERT RETURNING zaručeno, že vrátí věci ve správném pořadí?