PostgreSQL - 确定总数的百分比

Mar*_*daj 6 sql postgresql pgadmin psql

我有一张桌子

ID    |    NUMBER
------|----------
1     |      102
2     |      145
3     |      512
4     |      231
5     |       94
Run Code Online (Sandbox Code Playgroud)

并且我希望将所有'NUMBER'相加并从总计返回每行的%值.结果应如下所示:

ID    |    NUMBER    |   PERC
------|--------------|-------
1     |      102     |   9.4
2     |      145     |  13.4
3     |      512     |  47.2
4     |      231     |  21.3
5     |       94     |   8.7
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有类似的东西:

SELECT (number/sum(number)*100) AS perc
FROM mytable;
Run Code Online (Sandbox Code Playgroud)

但正如您所知,"数字"必须出现在GROUP BY或聚合函数中,因此我无法使用它.怎么做?

And*_*mar 18

你可以使用sum一个over子句:

SELECT  100.0 * number / sum(number) over () as perc
FROM    mytable;
Run Code Online (Sandbox Code Playgroud)

SQL Fiddle的例子.

  • 您可能希望防止被零除错误? (2认同)