Mysql
 sql >> Database >  >> RDS >> Mysql

MySql 5.7 La clausola ORDER BY non è nella clausola GROUP BY e contiene una colonna non aggregata

Questa è la tua domanda:

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

I luoghi indicati hanno problemi. Si noti che il SELECT e GROUP BY si riferiscono a colonne diverse. In un LEFT JOIN , tu (praticamente) vuoi sempre aggregare per qualcosa nel primo tabella, non la seconda.

Il ORDER BY è un altro problema. Non stai aggregando per questa colonna, quindi devi decidere quale valore desideri. Sto indovinando 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;

Aggiungerò anche quel COUNT(t.qty) è sospetto. Normalmente qty si riferisce a "quantità" e quello che vuoi è la somma:SUM(t.qty) .