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;
zanrvek_odpocet_her
Adventura71
Adventura122
Akční121
Akční162
Akční181
………

Č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;
roknovi_zakaznici
20235
20245
20254

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.

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_idhvezdickypocet_recenzi
131
141
152
221
………

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:

rokstavpocet_objednavek
2024vraceno1
2024zaplaceno14
2025vraceno1
2025zaplaceno14

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

7/10