Řazení skupin

Výsledek dotazu s GROUP BY je tabulka jako každá jiná a seřadíte ho pomocí ORDER BY. Můžete ho řadit podle sloupce, podle kterého seskupujete, jako v minulém cvičení, ale také podle agregační funkce. Které žánry mají nejvíc her?

SELECT zanr, COUNT(*) AS pocet_her
FROM hry
GROUP BY zanr
ORDER BY COUNT(*) DESC;
zanrpocet_her
Akční4
Strategie3
Adventura3
Závodní2
……

Místo toho, abyste funkci psali znovu, můžete řadit podle jejího aliasu: ORDER BY pocet_her DESC. Je to kratší, a když funkci později změníte, změníte ji jen na jednom místě. Proč alias v ORDER BY funguje a kde ne, se dozvíte na konci této lekce.

Podívejte se ale na výsledek. Adventury a strategie mají po 3 hrách a pět žánrů má 2. Žánry se stejným počtem tu shodou okolností přišly pozpátku podle abecedy, ale žádné pořadí není zaručené: jiná verze databáze nebo ta samá s více daty je může vrátit jinak. Jak víte z druhé lekce, o shodných hodnotách rozhodne druhý sloupec řazení:

SELECT zanr, COUNT(*) AS pocet_her
FROM hry
GROUP BY zanr
ORDER BY pocet_her DESC, zanr;
zanrpocet_her
Akční4
Adventura3
Strategie3
Logická2
……

S LIMIT dostanete nejlepší skupiny. Tři žánry s nejvyšší průměrnou cenou:

SELECT zanr, ROUND(AVG(cena), 1) AS prumerna_cena
FROM hry
GROUP BY zanr
ORDER BY prumerna_cena DESC
LIMIT 3;
zanrprumerna_cena
RPG1299.0
Sportovní1249.0
Akční836.5

Typická chyba: LIMIT 1 pro „žánr s nejvíce hrami“, když se o první místo dělí víc skupin. LIMIT 1 ukáže jednu z nich a o té druhé se nikdy nedozvíte. Než výsledek oříznete, podívejte se na pár dalších řádků, a vždycky přidejte druhý sloupec řazení, abyste věděli, kterou ze shodných skupin dostanete.

Pokyny

Kteří zákazníci zadali nejvíc objednávek? Změňte dotaz tak, aby je seřadil od nejvíce objednávek, zákazníky se stejným počtem podle zakaznik_id, a ukázal jen první 3 řádky:

zakaznik_idpocet_objednavek
14
34
23

Pod něj přidejte 3 hry, které si zákazníci objednali za nejvíc peněz, i s vrácenými objednávkami: hra_id a součet pocet * cena z tabulky polozky ve sloupci hodnota_polozek, od nejvyšší hodnoty:

hra_idhodnota_polozek
154797
13996
202697

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

6/10