Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅当结果不为NULL时才在SQL中乘法_Sql_Postgresql_Nullif - Fatal编程技术网

仅当结果不为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,你为什么要担心?