在PostgreSQL 中對特殊情況的值進行排序
本討論圍繞排列名為「tasks」的PostgreSQL 表中的資料進行。每個任務都有一個稱為「排序」的可選欄位。目標是將沒有「排序」值的排序任務優先於所有其他任務,但那些以「-1」作為排序值的任務除外,它應該出現在所有其他任務之後。
考慮以下範例資料:
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 |
單獨使用COALESCE(sort,99999) 會將空值分組在非空值之後,但它不會解決以下特殊情況"-1 ."
此解決方案採用PostgreSQL的布林資料型別來實現所需的排序順序:
SELECT * FROM tasks ORDER BY (sort IS NOT DISTINCT FROM -1), sort;
此查詢利用了比較“(sort IS NOT DISTINCT”這一事實FROM -1)”對於除“-1”之外的所有值均求值為FALSE,「-1」本身求值為TRUE。 >
這兩種方法都可以有效地對沒有「排序」值的任務進行排序,同時確保「-1」值出現在所有其他非空排序值之後。以上是如何對包含 Null 和特殊情況 (-1) 值的 PostgreSQL 資料進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!