【问题标题】:Multiply in SQL just if result is not NULL仅当结果不为 NULL 时才在 SQL 中相乘
【发布时间】:2019-01-09 12:22:15
【问题描述】:

我有以下疑问:

SELECT (COUNT(DISTINCT CASE WHEN houses.level = 'top' THEN users.id END)::float / NULLIF(COUNT(DISTINCT users.id)::float, 0)) 
FROM users
LEFT JOIN houses ON houses.user_id = users.id

而不是比率,我想返回一个百分比,所以我将其更改为:

SELECT (COUNT(DISTINCT CASE WHEN houses.level = 'top' THEN users.id END)::float / NULLIF(COUNT(DISTINCT users.id)::float, 0)) * 100
FROM users
LEFT JOIN houses ON houses.user_id = users.id

但是,如果分母 (NULLIF(COUNT(DISTINCT users.id)::float, 0)) 返回 null,则意味着我将乘以 NULL * 100。如果分母为 0(因此由于 NULLIF 而为 null),我怎样才能不乘以返回 NULL .

【问题讨论】:

  • NULL 被乘以 100 为什么你会担心?

标签: sql postgresql nullif


【解决方案1】:

可以将 INT 与 NULL 相乘。结果仍将为 NULL。

自己试试吧:

SELECT NULL * 100

【讨论】:

    【解决方案2】:

    如果你想让 NULL 代表 0%,使用 COALESCE:

    SELECT COALESCE((COUNT(DISTINCT CASE WHEN houses.level = 'top' THEN users.id END)::float / NULLIF(COUNT(DISTINCT users.id)::float, 0)) * 100, 0) ...
    

    COALESCE 返回它遇到的第一个非空事物,从左到右工作

    否则,就按照大雄的推荐去吧;让 null 为 null

    【讨论】:

      猜你喜欢
      • 2017-03-14
      • 2020-10-26
      • 1970-01-01
      • 2021-12-06
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 2021-02-21
      相关资源
      最近更新 更多