Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Klauzula MySql 5.7 ORDER BY nie znajduje się w klauzuli GROUP BY i zawiera kolumnę niezagregowaną

Oto Twoje zapytanie:

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

Wskazane miejsca mają problemy. Zauważ, że SELECT i GROUP BY odnoszą się do innej kolumny. W LEFT JOIN , (prawie) zawsze chcesz agregować według czegoś w pierwszym stół, a nie drugi.

ORDER BY to kolejny problem. Nie agregujesz według tej kolumny, więc musisz zdecydować, którą wartość chcesz. Zgaduję, że MIN() lub 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;

Dodam też, że COUNT(t.qty) jest podejrzany. Normalnie qty odnosi się do „ilości”, a to, czego chcesz, to suma:SUM(t.qty) .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak renderować drzewo w html + php(codeIgniter)

  2. Problem z aktualizacją pola MySQL za pomocą PHP

  3. docker.io - łączenie dockera między aplikacjami a kontenerami bazy danych

  4. Wdrażanie tabel asocjacyjnych

  5. zmień int na float (mysql)