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

Daj pierwszeństwo ORDER BY nad GROUP BY w MySQL bez podzapytania

Z definicji ORDER BY jest przetwarzane po grupowanie z GROUP BY. Z definicji, koncepcyjny sposób przetwarzania każdej instrukcji SELECT to:

  1. Oblicz iloczyn kartezjański wszystkich tabel, do których odwołuje się klauzula FROM
  2. Zastosuj kryteria łączenia z klauzuli FROM, aby filtrować wyniki
  3. Zastosuj kryteria filtrowania w klauzuli WHERE, aby dalej filtrować wyniki
  4. Pogrupuj wyniki w podzbiory na podstawie klauzuli GROUP BY, zwijając wyniki do jednego wiersza dla każdego takiego podzbioru i obliczając wartości dowolnych funkcji agregujących — SUM() , MAX() , AVG() itd. - dla każdego takiego podzbioru. Zwróć uwagę, że jeśli nie określono klauzuli GROUP BY, wyniki są traktowane tak, jakby istniał pojedynczy podzbiór, a wszelkie funkcje agregujące dotyczą całego zestawu wyników, zwijając go do pojedynczego wiersza.
  5. Przefiltruj teraz zgrupowane wyniki na podstawie klauzuli HAVING.
  6. Posortuj wyniki na podstawie klauzuli ORDER BY.

Jedyne kolumny dozwolone w zestawie wyników SELECT z klauzulą ​​GROUP BY to oczywiście

  • Kolumny, do których odwołuje się klauzula GROUP BY
  • Funkcje agregujące (takie jak MAX() )
  • dosłowne/stałe
  • wyrażenia pochodzące z dowolnego z powyższych.

Tylko uszkodzone implementacje SQL pozwalają na takie rzeczy jak select xxx,yyy,a,b,c FROM foo GROUP BY xxx,yyy — odniesienia do kolumn a, b i c są bez znaczenia/nieokreślone, biorąc pod uwagę, że poszczególne grupy zostały zwinięte do jednego wiersza,



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL a JSON — dlaczego?

  2. Nie można użyć zestawu znaków utf8mb4 z CloudSQL w AppEngine Python

  3. Uzyskiwanie znaków zapytania podczas wstawiania znaków hebrajskich do tabeli MySQL

  4. MySQL NOT IN Query znacznie wolniej po aktualizacji Mysql

  5. Jak usunąć pierwsze 3 znaki w mysql?