如何将 COUNT(CASE) 除以 COUNT()
How to divide COUNT(CASE ) by COUNT()
我正在尝试通过执行以下操作来计算百分比
(COUNT(CASE
WHEN col1 > 0
THEN my_id
ELSE null
END)/COUNT(my_id))*100 AS my_percent
输出的列 my_percent 是全零列。
如预期的那样,分别有 COUNTs return 个非负整数,几乎所有都 > 0。
COUNT(CASE
WHEN col1 > 0
THEN my_id
ELSE null
END) AS count_case
COUNT(my_id) AS simple_count
为什么 % 函数 return 为零而不是正数?我如何修改代码以提供预期的输出(正数而不是零)?
count
有一个 bigint
return 值,PostgreSQL 使用截断小数位的整数除法:
SELECT 7 / 3;
?column?
══════════
2
(1 row)
为避免这种情况,转换为 double precision
或 numeric
:
CAST(count(CASE WHEN col1 > 0 THEN my_id ELSE null END) AS double precision)
/
CAST(COUNT(my_id) AS double precision)
* 100 AS my_percent
我正在尝试通过执行以下操作来计算百分比
(COUNT(CASE
WHEN col1 > 0
THEN my_id
ELSE null
END)/COUNT(my_id))*100 AS my_percent
输出的列 my_percent 是全零列。
如预期的那样,分别有 COUNTs return 个非负整数,几乎所有都 > 0。
COUNT(CASE
WHEN col1 > 0
THEN my_id
ELSE null
END) AS count_case
COUNT(my_id) AS simple_count
为什么 % 函数 return 为零而不是正数?我如何修改代码以提供预期的输出(正数而不是零)?
count
有一个 bigint
return 值,PostgreSQL 使用截断小数位的整数除法:
SELECT 7 / 3;
?column?
══════════
2
(1 row)
为避免这种情况,转换为 double precision
或 numeric
:
CAST(count(CASE WHEN col1 > 0 THEN my_id ELSE null END) AS double precision)
/
CAST(COUNT(my_id) AS double precision)
* 100 AS my_percent