如何将 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 precisionnumeric:

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