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

问题描述 投票:0回答:2

我正在尝试按一个枚举对查询进行排序,其中我的枚举的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

请帮助

sql ruby-on-rails postgresql activerecord ruby-on-rails-5
2个回答
0
投票

您可以使用order by coalesce()

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

0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.