postgresql 如何将特定值排序为最后一个,其余记录按id DESC排序?

tktrz96b  于 2023-06-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(325)

| id|文件号|文件状态|
| - -----|- -----|- -----|
| 1| 12335|已通知|
| 2|四五六二|已批准|
| 3|四六七二三四|结果|
| 4|七八四五六|已批准|
| 5个|114667|已批准|
我想按id ASC对所有记录进行排序,但document_status为RESULTANT的记录必须是最后一个,因此它看起来如下所示
| id|文件号|文件状态|
| - -----|- -----|- -----|
| 1| 12335|已通知|
| 2|四五六二|已批准|
| 4|七八四五六|已批准|
| 5个|114667|已批准|
| 3|四六七二三四|结果|
这就是我尝试的,但是它完全忽略了我的第二个ORDER条件

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对其余记录进行排序

qlzsbp2j

qlzsbp2j1#

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

注意ASC是默认排序值,可以省略。

相关问题