首頁 >資料庫 >mysql教程 >如何在 PostgreSQL 中對非空值進行升序排序,然後是空值,最後是 -1 值?

如何在 PostgreSQL 中對非空值進行升序排序,然後是空值,最後是 -1 值?

Linda Hamilton
Linda Hamilton原創
2025-01-03 08:07:38656瀏覽

How to Sort Non-Null Values Ascending, then Nulls, with -1 Values Last in PostgreSQL?

在非空值之後以特殊方式對空值進行排序

背景

在具有可選排序字段的 PostgreSQL表中,目標是依下列方式對數值進行排序:

  • 非空值應排在第一位,依照排序值依升序排序。
  • NULL 值應出現在非空值之後。
  • 特殊情況下,排序值 -1 應出現在所有其他非空值之後。

要實現這種排序行為,一種方法是使用以下ORDER BY子句:

ORDER BY (sort IS NOT DISTINCT FROM -1), sort

解釋

此子句的操作如下:

  • (sort IS NOT DISTINCT FROM -1) 對於除 - 之外的所有值,計算結果為 FALSE 1,計算結果為 TRUE。
  • 表達式依升序排序,表示 FALSE值(除 -1 之外的非空值)位於 TRUE 值 (-1) 之前。
  • 輔助 ORDER BY 子句然後按排序值排序,確保非空值按升序排序他們各自的群組。

範例

考慮提供的範例data:

id f_id name sort
1 1 zeta -1
2 1 alpha 1
3 1 gamma 3
4 1 beta 2
5 1 delta NULL
6 1 epsilon NULL

使用提供的子句,項目將如下排序:

alpha, beta, gamma, delta, epsilon, zeta

替代形式

初始子句的等效替代是:

ORDER BY (sort IS DISTINCT FROM -1) DESC, sort

此子句產生相同的排序行為,但使用 DESC 關鍵字對 (sort IS DISTINCT FROM -1) 表達式依降序排列。

以上是如何在 PostgreSQL 中對非空值進行升序排序,然後是空值,最後是 -1 值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn