如果结果不为 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