Tôi cần tính phần trăm các thứ nguyên khác nhau trong bảng. Tôi muốn đơn giản hóa mọi thứ bằng cách sử dụng các hàm cửa sổ để tính toán mẫu số, tuy nhiên tôi đang gặp vấn đề bởi vì tử số cũng phải là tổng hợp.Cách sử dụng hàm cửa sổ SQL để tính phần trăm của tổng hợp
Như một ví dụ đơn giản, hãy bảng sau:
create temp table test (d1 text, d2 text, v numeric);
insert into test values ('a','x',5), ('a','y',5), ('a','y',10), ('b','x',20);
Nếu tôi chỉ muốn để tính toán tỷ lệ mỗi hàng cá nhân ra khỏi d1, chức năng sau đó windowing hoạt động tốt:
select d1, d2, v/sum(v) over (partition by d1)
from test;
"b";"x";1.00
"a";"x";0.25
"a";"y";0.25
"a";"y";0.50
Tuy nhiên, những gì tôi cần làm là tính toán tỷ lệ chung cho tổng của d2 trong số d1. Sản lượng Tôi đang tìm kiếm là thế này:
"b";"x";1.00
"a";"x";0.25
"a";"y";0.75
Vì vậy, tôi cố gắng này:
select d1, d2, sum(v)/sum(v) over (partition by d1)
from test
group by d1, d2;
Tuy nhiên, bây giờ tôi nhận được một lỗi:
ERROR: column "test.v" must appear in the GROUP BY clause or be used in an aggregate function
Tôi giả định này là vì nó phàn nàn rằng chức năng cửa sổ không được tính trong mệnh đề nhóm, tuy nhiên các chức năng cửa sổ không thể được đặt trong mệnh đề nhóm.
Điều này đang sử dụng Greenplum 4.1, là một nhánh của Postgresql 8.4 và chia sẻ cùng một chức năng cửa sổ. Lưu ý rằng Greenplum không thể thực hiện các truy vấn con tương quan.
Ah tuyệt vời! Đó là những gì tôi đã sau. Có ý nghĩa. Các tài liệu không phải là tất cả những gì rõ ràng về công cụ này. – EvilPuppetMaster
@erwinBrandsletter Đã cứu mạng tôi! cảm ơn – isJustMe