Ř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;| zanr | pocet_her |
|---|---|
| Akční | 4 |
| Strategie | 3 |
| Adventura | 3 |
| 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;| zanr | pocet_her |
|---|---|
| Akční | 4 |
| Adventura | 3 |
| Strategie | 3 |
| 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;| zanr | prumerna_cena |
|---|---|
| RPG | 1299.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.
Jak psát:
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_id | pocet_objednavek |
|---|---|
| 1 | 4 |
| 3 | 4 |
| 2 | 3 |
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_id | hodnota_polozek |
|---|---|
| 15 | 4797 |
| 1 | 3996 |
| 20 | 2697 |
Začněte programovat zdarma
6/10