在PostgreSQL中按顺序排序... ELSE ... END

时间:2018-03-03 19:31:43

标签: sql postgresql sql-order-by

我的ORDER BY条款如下:

...
ORDER BY CASE WHEN boolean_column is true  THEN text_column END ASC,
         CASE WHEN boolean_column is false THEN text_column END DESC

是否有可能替换CASE中的第二个ELSE?像往常一样,有两个条件而不是常规if else/when else感觉很奇怪。

3 个答案:

答案 0 :(得分:1)

如果text_column的类型是数字。你可以试试这个。

ORDER BY CASE WHEN boolean_column is true THEN text_column 
              ELSE -1 * text_column END ASC

答案 1 :(得分:1)

您可以使用此技巧缩短逻辑:

import Stack_PlistLR as s2

s = s2.Stack_PlistLR()

s.push(14)
print(s)

但它仍然是两个ORDER BY (CASE WHEN boolean_column THEN text_column END) ASC, text_column DESC 键。

答案 2 :(得分:1)

您可以先进行排序,获取每条记录的位置,然后选择排序方向

WITH rows_with_positions AS (
    SELECT
        boolean_column,
        text_column,
        ROW_NUMBER() OVER (ORDER BY text_column) AS position,
        .. 
    FROM your_table
)
SELECT text_column, ..
FROM rows_with_positions
ORDER BY
    CASE WHEN boolean_column
        THEN position
        ELSE -1 * position
        END
    ASC