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

时间:2019-01-09 12:22:16

标签: sql postgresql nullif

我有以下查询:

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)。

2 个答案:

答案 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为空