Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengisih Data PostgreSQL dengan Nulls dan Nilai Kes Khas (-1)?

Bagaimana untuk Mengisih Data PostgreSQL dengan Nulls dan Nilai Kes Khas (-1)?

Barbara Streisand
Barbara Streisandasal
2024-12-29 18:16:10595semak imbas

How to Sort PostgreSQL Data with Nulls and a Special Case (-1) Value?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn