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

Zapytanie z GROUP BY i ORDER BY nie działa, gdy wybrano wiele kolumn w SELECT

Musisz być ostrożny używając GROUP BY . Gdy zrozumiesz, co GROUP BY tak, sam poznasz problem. Wykonuje agregację na twoich danych lub innymi słowy, redukuje twoje dane, wykonując pewne operacje na surowych wpisach i tworząc nową zmniejszoną liczbę wpisów, na których zastosowano jakąś funkcję agregacji (SUM, COUNT, AVG, itp.)

Pola, które podajesz w GROUP BY klauzula reprezentuje poziom agregacji/roll-up, do którego dążysz.

SELECT col2, col3 FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1

Tutaj próbujesz wykonać agregację w col1 poziom, co oznacza, że ​​dla każdej odrębnej wartości znajdującej się w kolumnie col1 , zostanie wykonana pewna operacja na innych kolumnach podanych w SELECT klauzula(tutaj col2 ,col3 ) tak, że na wyjściu masz niepowtarzające się wartości w col1 i kilka zebranych wartości col2 i col3 przeciwko każdemu odrębnemu col1 wartość na podstawie zastosowanej funkcji (SUM, COUNT, AVG itp.).

Jak stosujesz tę funkcję? Tego brakuje w powyższym zapytaniu. Aby go rozwiązać, musisz zastosować jakąś funkcję agregacji na polach, które są obecne w SELECT klauzula, ale nie w GROUP BY klauzula. Biorąc przykład SUM, wypróbuj to:

SELECT SUM(col2), SUM(col3) FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1

LUB dla lepszego pomysłu usunięcie WHERE filtruj i sprawdzaj wyjście, uruchamiając:

SELECT col1, SUM(col2), SUM(col3) FROM tbl GROUP BY col1 ORDER BY col1

Dodatkowo, powód, dla którego Twoje inne zapytanie

SELECT col2 FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2

zadziałało, ponieważ nie musisz stosować agregacji do pola (tutaj col2 ), który jest obecny w GROUP BY klauzula.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. UNPIVOT mysql dane do innej tabeli

  2. Próbuję wykonać LOAD DATA INFILE za pomocą REPLACE i AUTO_INCREMENT

  3. Procedura składowana MySQL a złożone zapytanie

  4. Dlaczego nie powinieneś używać mysql_fetch_assoc więcej niż 1 raz?

  5. Warunki wyścigu MySQL