Problém:
Shromáždili jste data do skupin, ale chcete záznamy seřadit sestupně podle počtu prvků ve skupinách.
Příklad:
Naše databáze má tabulku s názvem user s údaji v následujících sloupcích:id , first_name , last_name a country .
| id | first_name | last_name | země |
|---|---|---|---|
| 1 | Lisa | Williams | Anglie |
| 2 | Gary | Anders | Polsko |
| 3 | Tome | Williams | Polsko |
| 4 | Michael | Hnědá | Francie |
| 5 | Susan | Smith | USA |
| 6 | Anne | Jones | USA |
| 7 | Ellie | Miller | Polsko |
Vytvořme zprávu o našich uživatelích. Výsledky seskupíme podle country a spočítat počet uživatelů z každé země. Skupiny ale také seřadíme sestupně podle počtu uživatelů. Země s největším počtem uživatelů se tak zobrazí nahoře.
Řešení:
SELECT country, COUNT(id) FROM user GROUP BY country ORDER BY COUNT(id) DESC ;
| země | count(id) |
|---|---|
| Polsko | 3 |
| USA | 2 |
| Anglie | 1 |
| Francie | 1 |
Diskuse:
Chcete-li seřadit vybrané záznamy podle počtu prvků v každé skupině, použijte ORDER BY doložka.
Prvním krokem je použití GROUP BY klauzule k vytvoření skupin (v našem příkladu seskupujeme podle country sloupec). Potom v klauzuli ORDER BY použijete agregační funkci COUNT, která spočítá počet hodnot ve vámi zvoleném sloupci; v našem příkladu počítáme různá ID pomocí COUNT(id) . To efektivně počítá počet prvků v každé skupině. ORDER BY klauzule pak seřadí skupiny podle tohoto výpočtu.
Jako obvykle můžete použít vzestupné i sestupné pořadí pomocí ORDER BY . Pokud chcete sestupné pořadí (jako v tomto příkladu), použijte DESC klíčové slovo. Vzestupné pořadí nepotřebuje žádné klíčové slovo, protože je výchozí, ale můžete použít ASC klíčové slovo, pokud chcete být explicitní. Toto je stejný příklad, ale s výsledky seřazenými vzestupně:
Řešení:
SELECT country, COUNT(id) FROM user GROUP BY country ORDER BY COUNT(id);
Zde je výsledek:
| země | count(id) |
|---|---|
| Anglie | 1 |
| Francie | 1 |
| USA | 2 |
| Polsko | 3 |