需要单独的列来计算百分比

Kin*_*rog 3 postgresql count sum

我有下表:

NAME
Alex
Bob 
Bob
Tim
Alex
Roger
Run Code Online (Sandbox Code Playgroud)

我需要生产以下内容:

 Name    Count Percentage
 Alex    2     33%
 Bob     2     33%
 Roger   1     16.6%
 Tim     1     16.6%
Run Code Online (Sandbox Code Playgroud)

我不知道从哪里开始。我可以对计数进行初始查询,这很简单。

Erw*_*ter 10

可能有一个SELECT

SELECT name, count(*), to_char((count(*) * 100.0
                          / sum(count(*)) OVER ()), 'FM990.00" %"') AS percent
FROM   t
GROUP  BY 1
ORDER  BY 1;
Run Code Online (Sandbox Code Playgroud)

count(*) 是函数的一种独立形式,count(<expression>). 假设所有列都是NOT NULL,否则您可能必须使用后者。

您可以运行窗口聚合函数sum(count(*)) OVER ()以获取相同SELECT. 考虑 a 中的事件序列SELECT

这使用一次顺序扫描而不是两次,并且通常比使用子查询进行总计数快两倍。

to_char() 美化输出:

name  count  percent
-----------------------
Alex  2      33.33 %
Bob   2      33.33 %
Roger 1      16.67 %
Tim   1      16.67 %
Run Code Online (Sandbox Code Playgroud)