2012-10-25 6 views
6

Mam tabeliPostgreSQL - określające procentowo o łącznej

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

i chcę podsumować wszystko „number” i zwraca wartość% od total do każdego wiersza. Wynik powinien wyglądać następująco:

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

tej pory mam coś takiego:

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

ale jak wiesz na pewno, że „liczba” musi pojawić się w GROUP BY lub funkcji zagregowanego więc nie można z niego korzystać. Jak to zrobić?

Odpowiedz

18

Można użyć sum z klauzulą ​​over:

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

Example at SQL Fiddle.

+1

Może chcesz chronić że przed podziałem przez zero błędów? –