Problema:
Vuoi ordinare le righe per data.
Esempio 1:
L'exam
la tabella ha due colonne, subject
e exam_date
.
soggetto | data_esame |
---|---|
Matematica | 19-12-2019 |
Inglese | 08-01-2020 |
Scienza | 05-01-2020 |
Salute | 05-01-2020 |
Arte | NULLO |
Vuoi ordinare le righe per exam_date
.
Soluzione:
SELECT * FROM exam ORDER BY exam_date;
Il risultato è simile a questo (le righe sono ordinate in ordine crescente per exam_date
):
Soggetto | Data dell'esame |
---|---|
Arte | NULLO |
Matematica | 19-12-2019 |
Scienza | 05-01-2020 |
Salute | 05-01-2020 |
Inglese | 08-01-2020 |
Discussione:
Usa il ORDER BY
parola chiave e il nome della colonna in base alla quale si desidera eseguire l'ordinamento. In questo modo, ordinerai i dati in ordine crescente in base a questa colonna. Puoi anche usare l'ASC
parola chiave per chiarire che l'ordine è crescente (la prima data viene mostrata per prima, l'ultima data viene mostrata per ultima, ecc.).
SELECT * FROM exam ORDER BY exam_date ASC;
Se desideri visualizzare prima la data più recente e quella più recente per ultima, è necessario ordinare in ordine decrescente. Usa il DESC
parola chiave in questo caso.
SELECT * FROM exam ORDER BY exam_date DESC;
Nota che in SQLite, NULL
I messaggi vengono visualizzati per primi quando si ordina in ordine crescente e per ultimi quando si ordina in ordine decrescente. Inoltre, le righe con lo stesso exam_date
vengono visualizzati in ordine casuale (potresti vedere Science
secondo e Health
terzo, o Health
secondo e Science
terzo).
Esempio 2:
L'exam
tabella ha le seguenti colonne:subject
, exam_year
, exam_month
e exam_day
. I mesi sono indicati in nomi, non in numeri.
soggetto | anno_esame | mese_esame | giorno_esame |
---|---|---|---|
Matematica | 2019 | Dicembre | 19 |
Inglese | 2020 | gennaio | 8 |
Scienza | 2020 | gennaio | 5 |
Salute | 2020 | gennaio | 5 |
Arte | NULLO | NULLO | NULLO |
Soluzione:
SELECT * FROM exam ORDER BY exam_year, (CASE exam_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END), exam_day;
Il risultato è simile a questo (le righe sono ordinate in ordine crescente per exam_year
, exam_month
e exam_day
):
soggetto | anno_esame | mese_esame | giorno_esame |
---|---|---|---|
Arte | NULLO | NULLO | NULLO |
Matematica | 2019 | Dicembre | 19 |
Salute | 2020 | gennaio | 5 |
Scienza | 2020 | gennaio | 5 |
Inglese | 2020 | gennaio | 8 |
Discussione:
Per ordinare le righe in base alla data dell'esame, è necessario ordinare prima per anno, quindi per mese numerico (non per nome del mese) e infine per giorno. Puoi convertire i nomi dei mesi in mesi numerici con un CASE WHEN
clausola. Dopo il CASE
parola chiave, specificare il nome della colonna. Quindi, dopo ogni QUANDO, indica il valore in questa colonna, utilizza la parola chiave THEN e specifica il nuovo valore che desideri assegnare al posto di quello vecchio. Qui, la colonna è exam_month
, i valori correnti in questa colonna sono 'January
', 'February
', …, 'December
', e i nuovi valori sono i mesi numerici 1
, 2
, …, 12
. Dopo aver finito di convertire tutti i valori, ricorda di usare il END
parola chiave per chiudere il CASE WHEN
clausola. Dai un'occhiata:
CASE exam_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END
Ecco come convertire il nome di un mese in un numero di mese. Puoi usarlo quando ordini le righe per data, ovvero per anno, mese numerico e giorno.
ORDER BY exam_year, (CASE exam_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END), exam_day
In questo modo, puoi ordinare le righe in ordine crescente per data. Il NULL
s verrà visualizzato per primo. Per cambiare l'ordine in decrescente, usa il DESC
parola chiave dopo ogni colonna in ORDER BY
clausola. Ecco come dovrebbe essere l'intera query:
SELECT * FROM exam ORDER BY exam_year DESC, (CASE exam_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END) DESC, exam_day DESC;
Nota che quando esegui l'ordinamento in ordine decrescente in SQLite, NULL
Le s vengono visualizzate per ultime.