Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySql 5.7 ORDER BY-Klausel ist nicht in GROUP BY-Klausel und enthält nicht aggregierte Spalte

Dies ist Ihre Anfrage:

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

Die angegebenen Orte haben Probleme. Beachten Sie, dass die SELECT und GROUP BY beziehen sich auf eine andere Spalte. In einem LEFT JOIN , möchten Sie (so ziemlich) immer zuerst nach etwas aggregieren Tabelle, nicht die zweite.

Der ORDER BY ist ein weiteres Problem. Sie aggregieren nicht nach dieser Spalte, daher müssen Sie entscheiden, welchen Wert Sie möchten. Ich vermute MIN() oder 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;

Ich werde auch diesen COUNT(t.qty) hinzufügen ist verdächtig. Normalerweise qty bezieht sich auf "Menge" und Sie wollen die Summe:SUM(t.qty) .