sql >> Base de Datos >  >> RDS >> Mysql

La cláusula ORDER BY de MySql 5.7 no está en la cláusula GROUP BY y contiene una columna no agregada

Esta es su consulta:

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

Los lugares señalados tienen problemas. Note que el SELECT y GROUP BY se refieren a una columna diferente. En un LEFT JOIN , usted (prácticamente) siempre quiere agregar por algo en el primero mesa, no la segunda.

El ORDER BY es otro problema No está agregando por esta columna, por lo que debe decidir qué valor desea. Supongo que MIN() o 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;

También agregaré que COUNT(t.qty) es sospechoso Normalmente qty se refiere a "cantidad" y lo que quieres es la suma:SUM(t.qty) .