Skupiny podle více sloupců
GROUP BY může mít několik sloupců oddělených čárkami. Do stejné skupiny se pak dostanou jen řádky, které mají stejné hodnoty ve všech z nich. Kolik her kterého žánru je pro který věk?
SELECT zanr, vek_od, COUNT(*) AS pocet_her
FROM hry
GROUP BY zanr, vek_od
ORDER BY zanr, vek_od;| zanr | vek_od | pocet_her |
|---|---|---|
| Adventura | 7 | 1 |
| Adventura | 12 | 2 |
| Akční | 12 | 1 |
| Akční | 16 | 2 |
| Akční | 18 | 1 |
| … | … | … |
Čtyři akční hry se rozdělily: dvě jsou od 16 let (Shadow Ninja a Robot Rebellion), jedna od 12 a jedna od 18. Výsledek má jeden řádek pro každou kombinaci žánru a věku, která se v tabulce vyskytuje. Kombinace bez jediné hry, třeba akční hry pro tříleté, v něm nejsou.
Pravidlo z minulých cvičení platí dál: každý sloupec v SELECT, který není uvnitř agregační funkce, musí být v GROUP BY. Tady jsou to zanr i vek_od.
Seskupovat můžete i podle výrazu, třeba podle funkce. Pomocí strftime('%Y', …) ze čtvrté lekce zjistíte, kolik zákazníků se zaregistrovalo v kterém roce:
SELECT strftime('%Y', registrace) AS rok, COUNT(*) AS novi_zakaznici
FROM zakaznici
GROUP BY strftime('%Y', registrace)
ORDER BY rok;| rok | novi_zakaznici |
|---|---|
| 2023 | 5 |
| 2024 | 5 |
| 2025 | 4 |
Do GROUP BY napište stejný výraz jako do SELECT. A můžete ho kombinovat i se sloupci: GROUP BY strftime('%Y', registrace), mesto by spočítal nové zákazníky každého města v každém roce.
Typická chyba: sloupec vynechaný z GROUP BY. SELECT zanr, vek_od, COUNT(*) FROM hry GROUP BY zanr; má jeden řádek pro každý žánr a jeho vek_od je věk jedné z her žánru, jak jste to viděli u názvů před dvěma cvičeními.
Jak psát:
Pokyny
Kolik recenzí s kterým počtem hvězdiček dostala která hra? Ukažte hra_id, hvezdicky a počet recenzí ve sloupci pocet_recenzi, seřazené podle hra_id a pak podle hvezdicky:
| hra_id | hvezdicky | pocet_recenzi |
|---|---|---|
| 1 | 3 | 1 |
| 1 | 4 | 1 |
| 1 | 5 | 2 |
| 2 | 2 | 1 |
| … | … | … |
Pod tím spočítejte objednávky každého roku s každým stavem: rok (strftime('%Y', datum)) ve sloupci rok, pak stav a počet objednávek ve sloupci pocet_objednavek, seřazené podle roku a stavu:
| rok | stav | pocet_objednavek |
|---|---|---|
| 2024 | vraceno | 1 |
| 2024 | zaplaceno | 14 |
| 2025 | vraceno | 1 |
| 2025 | zaplaceno | 14 |
Začněte programovat zdarma
7/10