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

Klauzule MySql 5.7 ORDER BY není v klauzuli GROUP BY a obsahuje neagregovaný sloupec

Toto je váš dotaz:

SELECT p.title, COUNT(t.qty) AS total 
-------^
FROM payments t LEFT JOIN
     products AS p 
     ON p.id = t.item 
WHERE t.user = 1 
GROUP BY t.item
---------^
ORDER BY t.created DESC;
---------^

Místa, na která ukazují, mají problémy. Všimněte si, že SELECT a GROUP BY odkazují na jiný sloupec. V LEFT JOIN , vy (v podstatě) vždy chcete agregovat podle něčeho prvního stůl, ne druhý.

ORDER BY je další problém. Podle tohoto sloupce neagregujete, takže se musíte rozhodnout, jakou hodnotu chcete. Hádám MIN() nebo MAX() :

SELECT p.title, COUNT(t.qty) AS total 
FROM payments t LEFT JOIN
     products AS p 
     ON p.id = t.item 
WHERE t.user = 1 
GROUP BY p.title
ORDER BY MAX(t.created) DESC;

Přidám také, že COUNT(t.qty) je podezřelý. Obvykle qty odkazuje na "množství" a co chcete, je součet:SUM(t.qty) .



  1. Jak aktualizovat stejnou tabulku při smazání v MYSQL?

  2. sequelize vybrat a zahrnout další alias tabulky

  3. Při vytváření pohledu se generuje chyba ORA-00942

  4. MySQL kolo v dotazu, špatný výsledek