首页 >数据库 >mysql教程 >如何在 PostgreSQL 中对非空值升序排序,然后是空值,最后是 -1 值?

如何在 PostgreSQL 中对非空值升序排序,然后是空值,最后是 -1 值?

Linda Hamilton
Linda Hamilton原创
2025-01-03 08:07:38633浏览

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