Řazení podle více sloupců
Některé hry stojí stejně: Pixel Racer, Ocean Deep i Bakery Story stojí 399 Kč. Když řadíte podle ceny, mají stejnou hodnotu a v jakém pořadí přijdou, je na databázi. Zaručené to není, stejně jako pořadí řádků bez ORDER BY.
Aby bylo pořadí jasné, přidejte za čárku druhý sloupec. Řádky se seřadí podle prvního sloupce a ty, které v něm mají stejnou hodnotu, podle druhého:
SELECT nazev, cena
FROM hry
ORDER BY cena, nazev;| nazev | cena |
|---|---|
| Cube Logic | 129 |
| Word Quest | 249 |
| Bakery Story | 399 |
| Ocean Deep | 399 |
| Pixel Racer | 399 |
| … | … |
Teď jsou tři hry za 399 Kč seřazené podle abecedy. Když dva sloupce nestačí, přidejte třetí a tak dále. Sloupec, jehož hodnoty se nikdy neopakují, jako id, rozhodne s jistotou vždycky.
Každý sloupec má svůj vlastní směr. DESC platí jen pro sloupec, za kterým stojí: ORDER BY cena DESC, nazev řadí ceny od nejvyšší, ale hry se stejnou cenou pořád od A do Z. Když chcete oba sloupce sestupně, napište DESC za každý z nich: ORDER BY cena DESC, nazev DESC.
Typická chyba: čekat, že jedno DESC na konci platí pro všechny sloupce. V ORDER BY vek_od, nazev DESC jdou věkové hranice pořád od nejnižší; od Z do A jsou jen názvy her se stejnou hranicí.
Řadit můžete i podle sloupce, který dotaz neukazuje. Tento dotaz vypíše jen jména zákazníků, od toho, který se zaregistroval jako poslední. Je to stejné pořadí jako ve vašem druhém dotazu v minulém cvičení, jen bez data registrace:
SELECT jmeno
FROM zakaznici
ORDER BY registrace DESC;| jmeno |
|---|
| Martin Zeman |
| Kristýna Fialová |
| Filip Beneš |
| … |
Jak psát:
Pokyny
Ukažte jméno a město každého zákazníka. Seřaďte zákazníky podle města a zákazníky ze stejného města podle jména. Zákazníci bez města budou první:
| jmeno | mesto |
|---|---|
| Anna Kučerová | NULL |
| Filip Beneš | NULL |
| Jakub Dvořák | Brno |
| Kristýna Fialová | Brno |
| … | … |
Pod tím ukažte žánr, název a cenu každé hry. Seřaďte hry podle žánru od A do Z a hry v každém žánru od nejdražší:
| zanr | nazev | cena |
|---|---|---|
| Adventura | Mystery Manor | 649 |
| Adventura | Lost Temple | 499 |
| Adventura | Ocean Deep | 399 |
| … | … | … |
Nakonec ukažte ID zákazníka a ID každé objednávky (sloupce zakaznik_id a id tabulky objednavky, v tomto pořadí). Seřaďte objednávky podle ID zákazníka a objednávky každého zákazníka od nejnovější. Rozhoduje sloupec datum, ale neukazujte ho:
| zakaznik_id | id |
|---|---|
| 1 | 26 |
| 1 | 14 |
| 1 | 4 |
| 1 | 1 |
| … | … |
Začněte programovat zdarma
4/12