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 |