pet*_*ern 20 sql sorting postgresql boolean
我的表有三个布尔字段:f1,f2,f3.如果我做
SELECT * FROM table ORDER BY f1, f2, f3
Run Code Online (Sandbox Code Playgroud)
记录将按照false,true,null的顺序按这些字段排序.我希望在true和false之间使用null来命令它们:正确的顺序应该是true,null,false.
我正在使用PostgreSQL.
mer*_*ike 27
不漂亮,但应该工作:
... order by (case when f1 then 1 when f1 is null then 2 else 3 end) asc
Run Code Online (Sandbox Code Playgroud)
Yo *_*dke 26
更好的解决方案是使用
f1 DESC NULLS LAST
如果你对订单是正确的,那么假,没有(我想你的问题的重要部分就像我现在的情况一样,将不真实的vaules放在一起)
小智 10
这应该效果更好
order by (f1 is true) desc
Run Code Online (Sandbox Code Playgroud)
小智 5
您还可以执行以下操作:
order by coalesce(f1, FALSE), coalesce(f1, TRUE), ...
Run Code Online (Sandbox Code Playgroud)
如果f1
是TRUE
,则得到:TRUE, TRUE
如果f1
是NULL
,则得到:FALSE, TRUE
如果f1
是FALSE
,则得到:FALSE, FALSE
对应于您想要的排序顺序。