Masalah:
Anda ingin mengurutkan baris menurut nomor bulan, nama bulan yang diberikan (Anda ingin Januari ditampilkan terlebih dahulu, Desember terakhir).
Contoh:
birthday
tabel berisi dua kolom:nama dan birthday_month
. Bulan ditulis dengan nama, bukan angka.
nama | bulan_ulang tahun |
---|---|
Ronan Tisha | Januari |
Desember | April |
Angie Julia | April |
Narelle Dillan | April |
Purdie Casey | Januari |
Donna Nell | NULL |
Blaze Graeme | Oktober |
Anda ingin mengurutkan baris berdasarkan birthday_month
.
Solusi:
SELECT * FROM birthday ORDER BY (CASE birthday_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);
Hasilnya terlihat seperti ini (baris diurutkan dalam urutan menaik berdasarkan birthday_month
):
nama | bulan_ulang tahun |
---|---|
Purdie Casey | Januari |
Angie Julia | April |
Narelle Dillan | April |
Blaze Graeme | Oktober |
Ronan Tisha | Januari |
Desember | NULL |
Donna Nell | NULL |
Diskusi:
Untuk mengurutkan baris berdasarkan bulan, Anda memerlukan bulan dalam angka (bukan nama). Anda dapat mengonversi nama bulan menjadi bulan numerik menggunakan CASE WHEN
ayat. Setelah CASE
kata kunci, tentukan nama kolom. Kemudian, setelah setiap WHEN
, nyatakan nilainya di kolom ini, gunakan THEN
kata kunci, dan tentukan nilai baru yang ingin Anda tetapkan, bukan yang lama. Di sini, kolomnya adalah birthday_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 birthday_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 untuk mengurutkan baris dalam urutan menaik berdasarkan bulan – cukup gunakan di ORDER BY
klausa.
Perhatikan bahwa dalam SQLite, NULL
s ditampilkan pertama kali saat mengurutkan dalam urutan menaik dan terakhir saat mengurutkan dalam urutan menurun. Juga, baris dengan birthday_month
yang sama ditampilkan dalam urutan acak (Anda dapat melihat Angie Julia
kedua dan Narelle Dillan
ketiga, atau Narelle Dillan
kedua dan Angie Julia
ketiga). Untuk mengubah urutan turun, gunakan DESC
kata kunci setelah kolom di ORDER BY
ayat. Berikut tampilan kuerinya:
SELECT * FROM birthday ORDER BY (CASE birthday_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;