【问题标题】:Order by case with NULLs not first nor last按大小写排序,NULL 不是第一个也不是最后一个
【发布时间】:2019-11-25 23:53:31
【问题描述】:

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以使用order by coalesce()

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

    【讨论】:

      猜你喜欢
      • 2011-09-25
      • 2011-06-01
      • 1970-01-01
      • 2012-01-20
      • 2012-04-16
      • 2012-10-27
      • 2021-03-06
      • 2012-08-16
      • 1970-01-01
      相关资源
      最近更新 更多