当我发现时NULLS LAST,我有点希望它可以CASE在ORDER BY查询部分的语句中泛化为“ X LAST” 。
NULLS LAST
CASE
ORDER BY
事实并非如此。
我正在尝试按两列对表进行排序(简单),但是以特定的顺序(简单)获得输出,其中 一个特定值的一列最后出现 (完成它……很丑)。
假设这些列是zone并且status(不要怪我命名列zone-我没有给它们命名)。status仅采用2个值(“ U”和“ S”),而zone可以采用约100个值中的任何一个。
zone
status
zone的值的一个子集是(在伪正则表达式中)IN[0-7]Z,而这些值在结果中排在第一位。使用可以很容易地做到这一点CASE。
IN[0-7]Z
zone 也可以采用值’Future’,该值应在结果中显示为LAST。
以我典型的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在ORDER BY子句中使用值,因此这是您的generalised 'X LAST':
boolean
generalised 'X LAST'
ORDER BY (my_column = 'X')
表达式的计算结果为boolean,结果值按以下方式排序:
FALSE (0) TRUE (1) NULL
由于我们处理非null值,这就是我们所需要的。这是您的一线客:
... ORDER BY (zone = 'Future'), zone, status;