sql >> Databáze >  >> RDS >> Mysql

Dejte přednost ORDER BY před GROUP BY v MySQL bez poddotazu

Podle definice se ORDER BY zpracovává po seskupení pomocí GROUP BY. Podle definice je koncepční způsob zpracování jakéhokoli příkazu SELECT:

  1. Vypočítejte kartézský součin všech tabulek, na které odkazuje klauzule FROM
  2. K filtrování výsledků použijte kritéria spojení z klauzule FROM
  3. Použijte kritéria filtru v klauzuli WHERE k dalšímu filtrování výsledků
  4. Seskupit výsledky do podmnožin na základě klauzule GROUP BY, sbalit výsledky do jednoho řádku pro každou takovou podmnožinu a vypočítat hodnoty všech agregačních funkcí -- SUM() , MAX() , AVG() atd. -- pro každou takovou podmnožinu. Všimněte si, že pokud není zadána žádná klauzule GROUP BY, s výsledky se zachází, jako by existovala jediná podmnožina a veškeré agregační funkce se použijí na celou sadu výsledků a sbalí ji do jednoho řádku.
  5. Filtrujte nyní seskupené výsledky na základě klauzule HAVING.
  6. Seřaďte výsledky na základě klauzule ORDER BY.

Jediné povolené sloupce ve výsledkové sadě SELECT s klauzulí GROUP BY jsou samozřejmě

  • Sloupce, na které odkazuje klauzule GROUP BY
  • Agregační funkce (např. MAX() )
  • doslova/konstanty
  • výrazy odvozené z kterékoli z výše uvedených možností.

Pouze nefunkční implementace SQL umožňují věci jako select xxx,yyy,a,b,c FROM foo GROUP BY xxx,yyy — odkazy na sloupce a, b a c jsou bezvýznamné/nedefinované, vzhledem k tomu, že jednotlivé skupiny byly sbaleny do jednoho řádku,



  1. PostgreSQL:Odeberte atribut ze sloupce JSON

  2. Výpočet mediánu pomocí Mysql

  3. po vytvoření jar souboru selže připojení k databázi

  4. Jak vypočítat rozdíl mezi dvěma daty v MySQL