在ORDER BY中使用CASE语句

时间:2013-09-17 12:34:50

标签: sql-order-by case postgresql-9.2

我有一个查询,需要根据其他字段采取不同的顺序。可以在CASE中使用ORDER BY语句,所以到目前为止工作正常。唯一似乎不可能的是改变升序/降序部分。

我的查询:

SELECT articleid, MIN(createtime) min,  MAX(createtime) max
FROM items 
GROUP BY articleid
ORDER BY
       CASE WHEN logic='foo' THEN min ELSE '0001-01-01 00:00:00' END ASC,
       CASE WHEN logic='bar' THEN max ELSE '0001-01-01 00:00:00' END DESC;

有效,但我想知道是否可以制作这样的表格(我知道这不起作用):

SELECT articleid, MIN(createtime) min,  MAX(createtime) max
FROM items 
GROUP BY articleid
ORDER BY
       CASE WHEN logic='foo' THEN min ASC ELSE max DESC END;

1 个答案:

答案 0 :(得分:0)

ASCDESC仅允许在表达式的末尾。但是,您可以将ASC置于最后,并且只是否定ELSE子句中的最大值(假设没有空值使问题复杂化)。

ORDER BY
    CASE WHEN logic='foo' THEN min ELSE -max END ASC;