0

我有以下查询:

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。

4

2 回答 2

1

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

自己试试:

SELECT NULL * 100
于 2019-01-09T12:23:28.367 回答
0

如果您希望 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

于 2019-01-09T12:24:49.807 回答