id document_number document_status
1 12335 INFORMED
2 4562 APPROVED
3 467234 RESULTANT
4 784456 APPROVED
5 114667 APPROVED

我想按id asc对所有记录进行排序,但带DOCUMENT_STATUS RESULTANT的记录必须是最后一条记录,因此如下所示

id document_number document_status
1 12335 INFORMED
2 4562 APPROVED
4 784456 APPROVED
5 114667 APPROVED
3 467234 RESULTANT

这就是我试过的,但它完全忽略了我的二阶条件

SELECT 
l.id,
l.document_number,
l.document_status
FROM load_record l
ORDER BY l.id ASC, (l.document_status = 'RESULTANT')

如果我删除l.id ASC,但它会将RESULTANT放在最后,但不会按id asc对其余记录进行排序,则会起作用

推荐答案

ORDER BY子句中,后续的排序字段(在您的例子中,第二个相对于第一个)只有在前一个条件被绑定时才会被引用,但在您的例子中,"l.id ASC"从未被绑定,因此"l.document_status = 'RESULTANT'"从未被选中.

如果您颠倒了ORDER BY子句中的字段,它应该可以正常工作,因为l.document_status = 'RESULTANT'实际上生成绑定的值,而l.id解绑.

ORDER BY l.document_status = 'RESULTANT', l.id

查看演示here.

Note:您可以省略ASC,因为它是默认的排序值.

Postgresql相关问答推荐

在SqlalChemy中转义动态CamelCase场

在Haskell中定义新类型与持久化类型的惯用方法

可以向判断枚举值的SQL列添加约束吗?

使函数内部动态插入更具可读性

如何重新格式化已获取的 psql 查询输出?

空表上的 Postgres 意外行为

对 Postgres 进行身份验证时如何使用自定义密码哈希算法?

Cloud SQL 时间点 数据驻留

从网址获取第一个字符串

如何获得区间的绝对值

使用 ON CONFLICT 从 INSERT 返回行,无需更新

org.postgresql.util.PSQLException:错误:relation "app_user" does not exist

在远程机器上Restore dump

我不明白 postgresql 的 nextval() 是如何工作的,有人可以解释一下吗?

Postgres jsonbNOT contains运算符

在同一分区上应用多个窗口函数

每个数据库提供程序类型允许的最大参数数是多少?

PostgreSQL 无法启动:server.key具有组或世界访问权限

升级到 Yosemite 10.10 后无法连接到 postgresql 数据库

PostgreSQL 9.1:如何连接数组中的行而不重复,加入另一个表