如果结果不为 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
我想要 return 百分比,而不是比率,所以我将其更改为:
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)
) return 为空,这意味着我将乘以 NULL
* 100。我怎么能只是 return NULL 而不如果分母为 0(由于 NULLIF,因此为空)。
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 returns 它遇到的第一个非空事物,从左到右工作
否则,就按照大雄的建议去做吧;让 null 为 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
我想要 return 百分比,而不是比率,所以我将其更改为:
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)
) return 为空,这意味着我将乘以 NULL
* 100。我怎么能只是 return NULL 而不如果分母为 0(由于 NULLIF,因此为空)。
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 returns 它遇到的第一个非空事物,从左到右工作
否则,就按照大雄的建议去做吧;让 null 为 null