Isih Nilai dengan Kes Khas dalam PostgreSQL
Perbincangan ini tertumpu pada penyusunan data daripada jadual PostgreSQL bernama "tugas." Setiap tugas mempunyai medan pilihan yang dipanggil "isih." Matlamatnya adalah untuk mengutamakan tugasan pengisihan tanpa nilai "isih" selepas semua yang lain, kecuali yang mempunyai "-1" sebagai nilai isihannya, yang sepatutnya muncul selepas semua yang lain.
Pertimbangkan data sampel berikut:
id | f_id | name | sort |
---|---|---|---|
1 | 1 | zeta | -1 |
2 | 1 | alpha | 1 |
3 | 1 | gamma | 3 |
4 | 1 | beta | 2 |
5 | 1 | delta | |
6 | 1 | epsilon |
Menggunakan COALESCE(sort,99999) sahaja akan mengumpulkan nilai nol selepas nilai bukan nol, tetapi ia tidak akan menangani yang istimewa kes "-1."
Penyelesaian menggunakan jenis data boolean PostgreSQL untuk mencapai susunan pengisihan yang diingini:
SELECT * FROM tasks ORDER BY (sort IS NOT DISTINCT FROM -1), sort;
Pertanyaan ini mengambil kesempatan daripada fakta bahawa perbandingan "(sort IS NOT DISTINCT FROM -1)" menilai kepada FALSE untuk semua nilai kecuali "-1," yang dengan sendirinya menilai kepada TRUE. Dengan mengisih mengikut ungkapan ini dahulu, nilai "-1" diletakkan pada penghujung tertib, tanpa mengira nilai isihannya.
Pendekatan alternatif, menggunakan kata kunci DESC, turut dibentangkan:
SELECT * FROM tasks ORDER BY (sort IS DISTINCT FROM -1) DESC, sort;
Kedua-dua kaedah secara berkesan mengisih tugas tanpa nilai "isih" selepas semua yang lain, sambil memastikan bahawa nilai "-1" muncul selepas semua jenis bukan nol yang lain nilai.
Atas ialah kandungan terperinci Bagaimana untuk Mengisih Data PostgreSQL dengan Nulls dan Nilai Kes Khas (-1)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!