sql >> Databasteknik >  >> RDS >> Mysql

MySql 5.7 ORDER BY-satsen finns inte i GROUP BY-satsen och innehåller icke-aggregerad kolumn

Det här är din fråga:

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;
---------^

De påpekade platserna har problem. Lägg märke till att SELECT och GROUP BY hänvisar till annan kolumn. I en LEFT JOIN , vill du (i stort sett) alltid aggregera med något i första tabellen, inte den andra.

ORDER BY är ett annat problem. Du aggregerar inte efter den här kolumnen, så du måste bestämma vilket värde du vill ha. Jag gissar på MIN() eller 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;

Jag lägger också till att COUNT(t.qty) är misstänkt. Normalt qty hänvisar till "kvantitet" och det du vill ha är summan:SUM(t.qty) .



  1. MySQL tar för evigt att "sända data". Enkel fråga, mycket data

  2. PHP Cookie för att hålla användaren inloggad - är detta tillräckligt säkert?

  3. Returnera SETOF rader från PostgreSQL-funktionen

  4. EF-kod först, hur registrerar man samma tabellnamn med olika schema?