Problém:
Chcete seřadit řádky podle data.
Příklad 1:
exam
tabulka má dva sloupce, subject
a exam_date
.
předmět | datum_zkoušky |
---|---|
Matematika | 19. 12. 2019 |
Angličtina | 2020-01-08 |
Věda | 2020-01-05 |
Zdraví | 2020-01-05 |
Umění | NULL |
Chcete seřadit řádky podle exam_date
.
Řešení:
SELECT *FROM examORDER BY exam_date;
Výsledek vypadá takto (řádky jsou seřazeny vzestupně podle exam_date
):
Předmět | Datum zkoušky |
---|---|
Umění | NULL |
Matematika | 19. 12. 2019 |
Věda | 2020-01-05 |
Zdraví | 2020-01-05 |
Angličtina | 2020-01-08 |
Diskuse:
Použijte ORDER BY
klíčové slovo a název sloupce, podle kterého chcete třídit. Tímto způsobem seřadíte data vzestupně podle tohoto sloupce. Můžete také použít ASC
klíčové slovo, aby bylo jasné, že objednávka je vzestupná (nejstarší datum se zobrazí jako první, poslední datum se zobrazí jako poslední atd.).
SELECT *FROM examORDER BY exam_date ASC;
Pokud chcete, aby se jako první zobrazilo nejnovější datum a jako poslední se zobrazí nejstarší datum, je třeba seřadit sestupně. Použijte DESC
v tomto případě klíčové slovo.
SELECT *FROM examORDER BY exam_date DESC;
Všimněte si, že v SQLite NULL
s se zobrazují jako první při vzestupném řazení a jako poslední při sestupném řazení. Také řádky se stejným exam_date
se zobrazují v náhodném pořadí (můžete vidět Science
druhý a Health
třetí nebo Health
druhý a Science
třetí).
Příklad 2:
exam
tabulka má následující sloupce:subject
, exam_year
, exam_month
a exam_day
. Měsíce jsou uvedeny ve jménech, nikoli v číslech.
předmět | exam_year | exam_month | exam_day |
---|---|---|---|
Matematika | 2019 | Prosinec | 19 |
Angličtina | 2020 | leden | 8 |
Věda | 2020 | leden | 5 |
Zdraví | 2020 | leden | 5 |
Umění | NULL | NULL | NULL |
Řešení:
SELECT *FROM examORDER BY exam_year, (CASE exam_month WHEN 'leden' TAK 1. KDY 'únor' POTOM 2. KDY 'březen' PAK 3. 'červenec' POTOM 7, KDY 'srpen' POTOM 8, KDY 'září' POTOM 9 KDYŽ 'říjen' POTOM 10 KDYŽ 'listopad' POTOM 11 KDYŽ 'prosinec' POTOM KONEC 12), exam_day;
Výsledek vypadá takto (řádky jsou seřazeny vzestupně podle exam_year
, exam_month
a exam_day
):
předmět | exam_year | exam_month | exam_day |
---|---|---|---|
Umění | NULL | NULL | NULL |
Matematika | 2019 | Prosinec | 19 |
Zdraví | 2020 | leden | 5 |
Věda | 2020 | leden | 5 |
Angličtina | 2020 | leden | 8 |
Diskuse:
Chcete-li seřadit řádky podle data zkoušky, musíte je nejprve seřadit podle roku, poté podle číselného měsíce (nikoli názvu měsíce) a nakonec podle dne. Názvy měsíců můžete převést na číselné měsíce pomocí CASE WHEN
doložka. Po CASE
klíčové slovo, zadejte název sloupce. Poté po každém KDY uveďte hodnotu v tomto sloupci, použijte klíčové slovo THEN a zadejte novou hodnotu, kterou chcete přiřadit místo staré. Zde je sloupec exam_month
, aktuální hodnoty v tomto sloupci jsou 'January
', 'February
', …, 'December
' a nové hodnoty jsou číselné měsíce 1
, 2
, …, 12
. Po dokončení převodu všech hodnot nezapomeňte použít END
klíčové slovo pro uzavření CASE WHEN
doložka. Podívejte se:
CASE exam_month KDYŽ 'leden' POTOM 1 KDY 'únor' POTOM 2 KDY 'březen' POTOM 3 KDY 'duben' POTOM 4 KDYŽ 'květen' POTOM 5 KDYŽ 'červen' POTOM 6 KDYŽ '7. července' POTOM POTOM 8 KDYŽ 'září' POTOM 9 KDYŽ 'říjen' POTOM 10 KDYŽ 'listopad' POTOM 11 KDYŽ 'prosinec' POTOM 12 END
Takto převedete název měsíce na číslo měsíce. Můžete jej použít při řazení řádků podle data, tedy podle roku, číselného měsíce a dne.
OBJEDNÁVKA DO zkouškového_roku, (CASE exam_month KDYŽ 'leden' POTOM 1 KDY 'únor' POTOM 2 KDY 'březen' POTOM 3 KDYŽ 'duben' POTOM 4 KDYŽ 'květen' POTOM 5 KDY 'červen' PAK 6. ČERVEN' POTOM 7 KDYŽ 'srpen' TAK 8 KDYŽ 'září' POTOM 9 KDYŽ 'říjen' POTOM 10 KDYŽ 'listopad' POTOM 11 KDYŽ 'prosinec' TAK 12 KONEC), exam_day
Tímto způsobem můžete seřadit řádky ve vzestupném pořadí podle data. NULL
s se zobrazí jako první. Chcete-li změnit pořadí na sestupné, použijte DESC
klíčové slovo za každým sloupcem v ORDER BY
doložka. Zde je návod, jak by měl celý dotaz vypadat:
SELECT *FROM examORDER BY exam_year DESC, (CASE exam_month KDYŽ 'leden' TAK 1 KDY 'únor' POTOM 2 KDYŽ 'březen' POTOM 3 KDYŽ 'duben' POTOM 4 KDYŽ 'květen' POTOM 5 KDYŽ '6. červen' KDYŽ 'červenec' TAK 7 KDY 'srpen' THEN 8 KDY 'září' THEN 9 KDY 'říjen' THEN 10 WHEN 'listopad' THEN 11 WHEN 'prosinec' THEN 12 END) DESC, exam_day DESC;Všimněte si, že při řazení v sestupném pořadí v SQLite
NULL
s se zobrazí jako poslední.