【发布时间】:2015-08-24 23:31:46
【问题描述】:
当我发现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 版本和表定义(你在 psql 中使用
\d tbl得到的),这将向我们显示确切的数据类型和 NOT NULL 约束。
标签: sql postgresql sql-order-by