PostgreSQL - Определяне на процента от общата сума

Имам маса

ID    |    NUMBER
------|----------
1     |      102
2     |      145
3     |      512
4     |      231
5     |       94

и искам да сумирам всички „NUMBER“ и да върна % стойност от общата сума за всеки ред. Резултатът трябва да изглежда така:

ID    |    NUMBER    |   PERC
------|--------------|-------
1     |      102     |   9.4
2     |      145     |  13.4
3     |      512     |  47.2
4     |      231     |  21.3
5     |       94     |   8.7

Досега имам нещо като:

SELECT (number/sum(number)*100) AS perc
FROM mytable;

но както знаете със сигурност, това „число“ трябва да се появи в GROUP BY или обобщена функция, така че не мога да го използвам. Как да стане това?


person Marián Zeke Šedaj    schedule 25.10.2012    source източник


Отговори (1)


Можете да използвате sum с клауза over:

SELECT  100.0 * number / sum(number) over () as perc
FROM    mytable;

Пример в SQL Fiddle.

person Andomar    schedule 25.10.2012
comment
Може би искате да защитите това срещу грешки при деление на нула? - person David Aldridge; 26.10.2012