2012-06-19 69 views
7

Tôi đang cố gắng lấy số tiền trung bình bằng cách sử dụng các hàm tổng hợp lồng nhau và nhóm. Những gì tôi muốn làm là:Các hàm tổng hợp lồng nhau với nhóm trong postgresql

SELECT AVG(SUM(x) GROUP BY y) WHERE ... GROUP BY ...; 

Đó là, cho mỗi hàng trở lại, tôi muốn một trong những lĩnh vực được trung bình khoản tiền, trong đó mỗi tổng hợp trên các hàng trong đó y là như nhau.

Tôi muốn tránh các lựa chọn phụ nếu có thể.

+0

"* Tôi muốn tránh subselects nếu có thể *". Tại sao? –

Trả lời

12

Bạn cần một subquery:

select z, avg(sumval) 
from (select y, z, sum(x) as sumval 
     from t 
     group by y, z 
    ) t 
group by z 
+0

Nhưng sau đó đối với mỗi hàng trả lại, tôi nhận được một giá trị z khác nhau và có cùng giá trị trung bình. Đây không phải là hành vi tôi muốn; cho mỗi giá trị z, tôi muốn nhận được một số tiền trung bình tương ứng cụ thể cho giá trị đó của z. Ví dụ, nếu dữ liệu của tôi là 'xyz 10 ag 15 ag 7 bg 8 ah 12 bh 18 bh' tôi mong chờ đã trở ' z, trung bình g 16 h 19 ' – ferson2020

+0

SQL ban đầu của tôi là cú pháp không chính xác. Nó phải có "z" như một biến nhóm trên truy vấn con bên trong. Tôi vừa sửa nó. –

+0

Cảm ơn sự giúp đỡ. – ferson2020

Các vấn đề liên quan