将 NULL 值排在所有其他值之后,特殊情况除外
在包含可选排序字段的 PostgreSQL 表中对数据进行排序时,一个常见的挑战正在处理空值。最好将具有空排序值的任务放在所有其他任务之后,但优先考虑具有特殊排序值(例如 -1)的任务。
这可以通过结合使用 COALESCE 函数和布尔运算符来实现,特别是 (IS NOT DISTINCT FROM) 运算符。以下查询演示了这种方法:
SELECT * FROM tasks ORDER BY (sort IS NOT DISTINCT FROM -1), sort;
工作原理:
(sort IS NOT DISTINCT FROM -1) 表达式对于除-1,计算结果为 TRUE。在 PostgreSQL 的默认排序顺序中,NULL 值放在最后,而 TRUE 的排名高于 FALSE。
通过将此表达式合并到 ORDER BY 子句中,排序值为 -1 的任务将定位在非 -1 的任务之后空排序值,而具有空排序值的任务放置在所有其他任务之后。
其他注意:
可以使用 DESC 关键字编写替代的等效查询:
SELECT * FROM tasks ORDER BY (sort IS DISTINCT FROM -1) DESC, sort;
以上是如何对最后带有 NULL 的 PostgreSQL 数据进行排序(特定值除外)?的详细内容。更多信息请关注PHP中文网其他相关文章!