[英]Multiply in SQL just if result is not NULL
我有以下查询:
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)。
可以将INT与NULL相乘。 结果将仍然为NULL。
自己尝试:
SELECT NULL * 100
如果您希望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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.