我有以下查询:
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,那么我怎么能不乘而返回NULL(因此,因为NULLIF)。
答案 0 :(得分:1)
可以将INT与NULL相乘。结果将仍然为NULL。
亲自尝试:
SELECT NULL * 100
答案 1 :(得分: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为空