Masalah:
Anda ingin mengurutkan baris berdasarkan tanggal.
Contoh 1:
exam
tabel memiliki dua kolom, subject
dan exam_date
.
subjek | tanggal_ujian |
---|---|
Matematika | 2019-12-19 |
Bahasa Inggris | 08-01-2020 |
Ilmu | 05-01-2020 |
Kesehatan | 05-01-2020 |
Seni | NULL |
Anda ingin mengurutkan baris berdasarkan exam_date
.
Solusi:
SELECT * FROM exam ORDER BY exam_date;
Hasilnya terlihat seperti ini (baris diurutkan dalam urutan menaik berdasarkan exam_date
):
Subjek | Tanggal Ujian |
---|---|
Seni | NULL |
Matematika | 2019-12-19 |
Ilmu | 05-01-2020 |
Kesehatan | 05-01-2020 |
Bahasa Inggris | 08-01-2020 |
Diskusi:
Gunakan ORDER BY
kata kunci dan nama kolom yang ingin Anda urutkan. Dengan cara ini, Anda akan mengurutkan data dalam urutan menaik menurut kolom ini. Anda juga dapat menggunakan ASC
kata kunci untuk memperjelas bahwa urutannya naik (tanggal paling awal ditampilkan terlebih dahulu, tanggal terakhir ditampilkan terakhir, dll.).
SELECT * FROM exam ORDER BY exam_date ASC;
Jika Anda ingin melihat tanggal terakhir terlebih dahulu dan tanggal paling awal terakhir, Anda harus mengurutkan dalam urutan menurun. Gunakan DESC
kata kunci dalam hal ini.
SELECT * FROM exam ORDER BY exam_date DESC;
Perhatikan bahwa dalam SQLite, NULL
s ditampilkan pertama kali saat mengurutkan dalam urutan menaik dan terakhir saat mengurutkan dalam urutan menurun. Juga, baris dengan exam_date
yang sama ditampilkan dalam urutan acak (Anda mungkin melihat Science
kedua dan Health
ketiga, atau Health
kedua dan Science
ketiga).
Contoh 2:
exam
tabel memiliki kolom berikut:subject
, exam_year
, exam_month
, dan exam_day
. Bulan ditulis dengan nama, bukan angka.
subjek | tahun_ujian | ujian_bulan | hari_ujian |
---|---|---|---|
Matematika | 2019 | Desember | 19 |
Bahasa Inggris | 2020 | Januari | 8 |
Ilmu | 2020 | Januari | 5 |
Kesehatan | 2020 | Januari | 5 |
Seni | NULL | NULL | NULL |
Solusi:
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;
Hasilnya terlihat seperti ini (baris diurutkan dalam urutan menaik berdasarkan exam_year
, exam_month
, dan exam_day
):
subjek | tahun_ujian | ujian_bulan | hari_ujian |
---|---|---|---|
Seni | NULL | NULL | NULL |
Matematika | 2019 | Desember | 19 |
Kesehatan | 2020 | Januari | 5 |
Ilmu | 2020 | Januari | 5 |
Bahasa Inggris | 2020 | Januari | 8 |
Diskusi:
Untuk mengurutkan baris menurut tanggal ujian, Anda harus mengurutkan terlebih dahulu berdasarkan tahun, lalu menurut bulan numerik (bukan nama bulan), dan terakhir menurut hari. Anda dapat mengonversi nama bulan menjadi bulan numerik dengan CASE WHEN
ayat. Setelah CASE
kata kunci, tentukan nama kolom. Kemudian, setelah setiap WHEN, nyatakan nilai dalam kolom ini, gunakan kata kunci THEN, dan tentukan nilai baru yang ingin Anda tetapkan, bukan yang lama. Di sini, kolomnya adalah exam_month
, nilai saat ini di kolom ini adalah 'January
', 'February
', …, 'December
', dan nilai barunya adalah bulan numerik 1
, 2
, …, 12
. Setelah Anda selesai mengonversi semua nilai, ingatlah untuk menggunakan END
kata kunci untuk menutup CASE WHEN
ayat. Lihat:
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
Ini adalah bagaimana Anda mengubah nama bulan menjadi nomor bulan. Anda dapat menggunakannya saat mengurutkan baris berdasarkan tanggal, yaitu tahun, bulan numerik, dan hari.
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
Dengan cara ini, Anda dapat mengurutkan baris dalam urutan menaik berdasarkan tanggal. NULL
s akan ditampilkan terlebih dahulu. Untuk mengubah urutan turun, gunakan DESC
kata kunci setelah setiap kolom di ORDER BY
ayat. Berikut tampilan keseluruhan kueri:
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;
Perhatikan bahwa saat mengurutkan dalam urutan menurun di SQLite, NULL
s ditampilkan terakhir.