PostgreSQL — определение процента от общего числа

у меня есть стол

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

и я хочу суммировать все «ЧИСЛО» и вернуть значение% от общего количества в каждую строку. Результат должен выглядеть так:

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.

person Andomar    schedule 25.10.2012
comment
Возможно, вы захотите защитить это от ошибок деления на ноль? - person David Aldridge; 26.10.2012