用于将boolean列排序为true,null,false的SQL

时间:2010-05-13 15:39:39

标签: sql postgresql sorting boolean

我的表有三个布尔字段:f1,f2,f3。如果我做

SELECT * FROM table ORDER BY f1, f2, f3

记录将按照false,true,null的顺序按这些字段排序。我希望在true和false之间使用null来命令它们:正确的顺序应该是true,null,false。

我正在使用PostgreSQL。

4 个答案:

答案 0 :(得分:26)

不漂亮,但应该有效:

   ... order by (case when f1 then 1 when f1 is null then 2 else 3 end) asc

答案 1 :(得分:22)

更好的解决方案是使用

f1 DESC NULLS LAST

如果你对订单是正确的,那么假,没有(我猜你问题的重要部分就像我现在的情况一样,将不真实的vaules放在一起)

https://stackoverflow.com/a/7621232/1627888

答案 2 :(得分:3)

你也可以这样做:

order by coalesce(f1, FALSE), coalesce(f1, TRUE), ...

如果f1TRUE,则会获得:TRUE, TRUE
如果f1NULL,则会获得:FALSE, TRUE
如果f1FALSE,则会获得:FALSE, FALSE

对应于您想要的排序顺序。

答案 3 :(得分:-1)

还可以执行以下操作:

... ORDER BY (CASE WHEN f1 IS NOT NULL THEN f1::int * 2 ELSE 1 END) DESC