用COUNT()计算

Tie*_*ter 5 sql postgresql

我有一个可以分组的数据集,想知道每个组中行的百分比.

这看起来几乎可行,除了因为imho缺少类型转换而为每个组返回0

SELECT COUNT(*) / (SELECT COUNT(name) 
                    FROM x 
                    WHERE d = '0') 
  FROM x, y 
  WHERE x.a = y.a AND x.b = '0' 
  GROUP BY y.c 
  ORDER BY y.c ASC
Run Code Online (Sandbox Code Playgroud)

我该如何正确地投这个?

kgr*_*ttn 6

1.0您可以直接进行转换,而不是乘以。这对我来说似乎更干净、更清晰。一方面,它清楚地表明您要使用什么数据类型。您可能对精度float4float8近似值感到满意,而不是为精确numeric计算支付额外费用。

SELECT COUNT(*)::float / (SELECT COUNT(name) 
                           FROM x 
                           WHERE d = '0')::float
  FROM x, y 
  WHERE x.a = y.a AND x.b = '0' 
  GROUP BY y.c 
  ORDER BY y.c ASC
Run Code Online (Sandbox Code Playgroud)
测试=#选择1.0 * 5 / 10;
        ?柱子?        
------------------------
 0.50000000000000000000
(1 行)

测试=#选择pg_typeof(1.0 * 5 / 10);
 pg_typeof
------------
 数字
(1 行)

测试 =# 选择 5::float / 10::float;
 ?柱子?
----------
      0.5
(1 行)

测试=#选择pg_typeof(5::float / 10::float);
    pg_typeof     
------------------
 双精度
(1 行)


Dav*_*ile 5

你应该能够做到

select 1.0 * count(*) / .....
Run Code Online (Sandbox Code Playgroud)