2012-10-25 19 views
6

Tôi có một bảngPostgreSQL - Xác định Tỷ lệ phần trăm của một Tổng

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

và tôi muốn tổng hợp tất cả 'NUMBER' và trả về một giá trị% so với tổng cho mỗi hàng. Kết quả sẽ giống như thế này:

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

Cho đến nay, tôi có một cái gì đó như:

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

nhưng khi bạn biết chắc chắn, đó là 'số' phải xuất hiện trong GROUP BY hoặc chức năng tổng hợp nên tôi không thể sử dụng nó. Làm thế nào để làm điều đó?

Trả lời

18

Bạn có thể sử dụng sum với một khoản over:

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

Example at SQL Fiddle.

+1

Bạn có thể muốn bảo vệ mà chống lại sự phân chia-by-zero lỗi? –