sql - 按案例排序,NULL 不是第一个也不是最后一个

标签 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

请帮忙

最佳答案

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

关于sql - 按案例排序,NULL 不是第一个也不是最后一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59041784/

相关文章:

sql - Node.js 和 Postgres : Temporary table "relation does not exist" on chained query

java - 如何使用 mySql 中的日期数据类型正确更新 JTable 中的字段?

ruby-on-rails - Ruby Rails - session 管理

ruby-on-rails - 相同 2 个模型之间的多个 has_many/belongs_to

database - 对于 Postgres (Windows),是否有与 TOAD 一样好的东西?

javascript - 类型 ORM QueryFailedError PostgreSQL

mysql - musicbrainz 无法按国家/地区统计艺术家

sql - &lt 和 &gt sql 语句问题

javascript - 如何保存函数的输入值?

ruby-on-rails - 防止用户发布虚假的 AJAX 请求(确保 AJAX 请求仅来自应用程序)