Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

A cláusula MySql 5.7 ORDER BY não está na cláusula GROUP BY e contém uma coluna não agregada


Esta é a sua 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;
---------^

Os lugares apontados têm problemas. Observe que o SELECT e GROUP BY estão se referindo a coluna diferente. Em um LEFT JOIN , você (praticamente) sempre deseja agregar por algo no primeiro mesa, não a segunda.

O ORDER BY é outro problema. Você não está agregando por esta coluna, portanto, você precisa decidir qual valor deseja. Estou supondo MIN() ou 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;

Também adicionarei que COUNT(t.qty) é suspeito. Normalmente qty refere-se a "quantidade" e o que você quer é a soma:SUM(t.qty) .