GT.*_*GT. 4 sql postgresql sql-order-by
当我发现时,我有点希望它可以在声明中NULLS LAST推广到“X LAST”CASEORDER BY,我有点希望它可以在查询部分的
看来并非如此。
我正在尝试按两列对表进行排序(简单),但以特定顺序获取输出(简单),其中一列的一个特定值出现在最后(完成了......丑陋)。
假设这些列是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
Run Code Online (Sandbox Code Playgroud)
这可行,但显然是一种拼凑,我想知道是否可能有单行代码做同样的事情。
有没有更干净的方法来达到相同的结果?
Postgres 允许boolean在子句中使用值ORDER BY,因此这是您的generalised 'X LAST':
ORDER BY (my_column = 'X')
Run Code Online (Sandbox Code Playgroud)
表达式的计算结果为boolean,结果值按如下方式排序:
FALSE (0)
TRUE (1)
NULL
Run Code Online (Sandbox Code Playgroud)
由于我们处理非空值,这就是我们所需要的。这是你的一句话:
...
ORDER BY (zone = 'Future'), zone, status;
Run Code Online (Sandbox Code Playgroud)
有关的:
| 归档时间: |
|
| 查看次数: |
3511 次 |
| 最近记录: |