Tôi nghĩ bạn đang tìm kiếm điều này:
SELECT d1, d2, sum(v)/sum(sum(v)) OVER (PARTITION BY d1) AS share
FROM test
GROUP BY d1, d2;
Tạo ra kết quả được yêu cầu.
Các chức năng của cửa sổ được áp dụng sau Chức năng tổng hợp. sum()
bên ngoài trong sum(sum(v)) OVER ...
là một chức năng cửa sổ (đính kèm OVER ...
mệnh đề) trong khi sum()
bên trong là một hàm tổng hợp.
Hiệu quả giống như:
WITH x AS (
SELECT d1, d2, sum(v) AS sv
FROM test
GROUP BY d1, d2
)
SELECT d1, d2, sv/sum(sv) OVER (PARTITION BY d1) AS share
FROM x;
Hoặc (không có CTE):
SELECT d1, d2, sv/sum(sv) OVER (PARTITION BY d1) AS share
FROM (
SELECT d1, d2, sum(v) AS sv
FROM test
GROUP BY d1, d2
) x;
Hoặc biến thể của @ Mu.
Bên cạnh:Greenplum đã giới thiệu các truy vấn con tương quan với phiên bản 4.2. Xem ghi chú phát hành.