PostgreSQL: 按列排序,特定的NON-NULL值LAST[英] PostgreSQL: order by column, with specific NON-NULL value LAST

本文是小编为大家收集整理的关于PostgreSQL: 按列排序,特定的NON-NULL值LAST的处理方法,想解了PostgreSQL: 按列排序,特定的NON-NULL值LAST的问题怎么解决?PostgreSQL: 按列排序,特定的NON-NULL值LAST问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

当我发现 NULLS LAST 时,我有点希望它可以在查询的 ORDER BY 部分的 CASE 语句中推广为"X LAST".

似乎不是这样.

我正在尝试按两列对表格进行排序(简单),但以特定顺序(简单)获取输出,一列的一个特定值最后出现(明白了完成...丑陋).

假设列是 zone 和 status (不要怪我命名列 zone - 我没有命名它们).status 只取 2 个值('U' 和 'S'),而 zone 可以取大约 100 个值中的任何一个.

zone 值的一个子集是(在伪正则表达式中)IN[0-7]Z,它们在结果中排​​在第一位.使用 CASE 很容易做到这一点.

zone 也可以取值 'Future',它应该出现在结果的最后.

以我典型的 kludgy-munge 方式,我简单地将 CASE 值设置为 1000,如下所示:

group by zone, status
order by (
 case when zone='IN1Z' then 1
      when zone='IN2Z' then 2
      when zone='IN3Z' then 3
        .
        . -- other IN[X]Z etc
        .
      when zone = 'Future' then 1000
      else 11 -- [number of defined cases +1]
      end), zone, status

这行得通,但它显然是一个拼凑,我想知道是否可能有一个班轮做同样的事情.
有没有更简洁的方法来达到同样的效果?

推荐答案

Postgres 允许 boolean 值,所以这是你的 generalised 'X LAST':

ORDER BY (my_column = 'X')

表达式计算结果为 boolean,结果值按以下方式排序:

FALSE (0)
TRUE (1)
NULL

由于我们处理的是非空值,这就是我们所需要的.这是你的单线:

...
ORDER BY (zone = 'Future'), zone, status;

相关:

本文地址:https://www.itbaoku.cn/post/1764093.html