按大小写顺序排列,NULL值不是第一个也不是最后一个

时间:2019-11-25 23:53:31

标签: sql ruby-on-rails postgresql activerecord ruby-on-rails-5

我正在尝试按一个枚举对查询进行排序,其中我的枚举的2个值我希望具有相同的优先级,但是我也希望在其中而不是首先将NULL混合在一起。

我正在使用一种情况,即使用OR运算符的语法在它们之间具有相同的优先级,这似乎工作得很好,除了NULL的顺序不正确,它们似乎是随机的。

CASE
  WHEN company_size = 0 OR
   company_size = 1 OR
   company_size = NULL THEN '0'
  WHEN company_size = 2 THEN '1'
  WHEN company_size = 3 THEN '2'
END

请帮助

2 个答案:

答案 0 :(得分:2)

NULL = NULL的计算结果为NULL,而不是true。在CASE WHEN表达式中,NULL与false的结果相同。要将NULL与1和0混合在一起,您可能需要这样做:

CASE
  WHEN company_size = 0 OR
   company_size = 1 OR
   company_size is NULL THEN '0'
  WHEN company_size = 2 THEN '1'
  WHEN company_size = 3 THEN '2'
END

答案 1 :(得分:1)

您可以使用order by coalesce()

select * from tableA
order by coalesce(company_size, 0)