Jedinečné hodnoty: DISTINCT
Jaké žánry obchod má? SELECT zanr FROM hry; dá 20 řádků, jeden pro každou hru, a většina žánrů je tam několikrát. DISTINCT (různé), hned za SELECT, nechá každý různý řádek jen jednou:
SELECT DISTINCT zanr
FROM hry
ORDER BY zanr;| zanr |
|---|
| Adventura |
| Akční |
| Logická |
| RPG |
| Simulace |
| Sportovní |
| Strategie |
| Závodní |
Osm žánrů místo dvaceti řádků. Samotné DISTINCT nic neřadí: podle abecedy jsou žánry díky ORDER BY a bez něj by mohly přijít v libovolném pořadí.
S několika sloupci odstraní DISTINCT jen ty řádky, které jsou stejné ve všech sloupcích. Za jaké ceny se která hra prodávala?
SELECT DISTINCT hra_id, cena
FROM polozky
ORDER BY hra_id, cena;| hra_id | cena |
|---|---|
| 1 | 999 |
| 2 | 399 |
| 3 | 499 |
| 4 | 799 |
| 5 | 399 |
| 5 | 649 |
| … | … |
Většina her je tam jednou, ale některé dvakrát, třeba hra 5, Shadow Ninja: prodávala se za 649 Kč a na Black Friday za 399 Kč. Rozhoduje kombinace hodnot v řádku, ne každý sloupec zvlášť. I NULL se počítá jako hodnota: když ho má několik řádků, DISTINCT nechá jeden z nich.
DISTINCT se píše jednou, hned za SELECT, a platí pro celý řádek. Typická chyba: napsat ho před jeden ze sloupců. SELECT hra_id, DISTINCT cena FROM polozky; skončí chybou near "DISTINCT": syntax error.
Jak psát:
Pokyny
Dotaz v editoru ukazuje město každého zákazníka a města se opakují. Změňte ho tak, aby tam bylo každé město jen jednou, podle abecedy. Zákazníci bez města přidají ještě jeden řádek, NULL:
| mesto |
|---|
| NULL |
| Brno |
| Ostrava |
| Plzeň |
| Praha |
Pod něj přidejte dotaz, který ukáže ID zákazníků, kteří si něco objednali: sloupec zakaznik_id tabulky objednavky, každé ID jen jednou, od nejmenšího. Zákazníci 12 a 14 tam nebudou, protože si nikdy nic neobjednali:
| zakaznik_id |
|---|
| 1 |
| 2 |
| 3 |
| 4 |
| … |
Nakonec zjistěte, jaké věkové hranice mají jednotlivé žánry: ukažte každou kombinaci zanr a vek_od jen jednou a seřaďte je podle žánru a pak podle věkové hranice:
| zanr | vek_od |
|---|---|
| Adventura | 7 |
| Adventura | 12 |
| Akční | 12 |
| Akční | 16 |
| … | … |
Začněte programovat zdarma
12/12