繁体   English   中英

仅在结果不为NULL时在SQL中相乘

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM