仅当结果不为NULL时才在SQL中乘法
我有以下疑问:仅当结果不为NULL时才在SQL中乘法,sql,postgresql,nullif,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 WH
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,返回NULL)。可以将INT与NULL相乘。结果仍然为空
你自己试试吧:
SELECT NULL * 100
如果希望NULL表示0%,请使用合并:
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为null如果
null
乘以100,你为什么要担心?