如何在postgres sql中的`ORDER BY`的第二个键中包含`CASE`?

问题描述 投票:0回答:1

在 Postgres 中,我试图有一个按多列排序的 SQL。第一列始终是

priority DESC NULLS LAST
。第二个需要根据某些条件是动态的(为了方便举例,这里我有
WHEN 1 = 1
)。

SELECT id, title, priority
FROM post
ORDER BY 
    priority DESC NULLS LAST,
    CASE WHEN 1 = 1 THEN created_at ASC ELSE created_at DESC END;

这会引发错误:

syntax error at or near "ASC"
LINE 5:         CASE WHEN 1 = 1 THEN created_at ASC ELSE created_at ...

我怎样才能在

CASE
的第二个键上有
ORDER BY

sql postgresql postgresql-16
1个回答
0
投票

如果 else 结束,则不能使用

DESC
ASC

尝试

SELECT id, title, priority
FROM post
ORDER BY 
    priority DESC NULLS LAST,
    CASE WHEN 1 = 1 THEN created_at-'2025-01-01'::date   -- ASC
    ELSE '2025-01-01'::date-created_at  END; -- DESC

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.