मुझे लगता है कि आप इसे ढूंढ रहे हैं:
SELECT d1, d2, sum(v)/sum(sum(v)) OVER (PARTITION BY d1) AS share
FROM test
GROUP BY d1, d2;
अनुरोधित परिणाम उत्पन्न करता है।
विंडो फ़ंक्शन बाद लागू होते हैं कुल कार्य। बाहरी sum()
में sum(sum(v)) OVER ...
एक विंडो फ़ंक्शन है (संलग्न OVER ...
क्लॉज) जबकि आंतरिक sum()
एक समग्र कार्य है।
प्रभावी रूप से वही:
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;
या (सीटीई के बिना):
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;
या @ म्यू का संस्करण।
इसके अलावा:ग्रीनप्लम ने संस्करण 4.2 के साथ सहसंबद्ध उपश्रेणियाँ पेश कीं। रिलीज़ नोट देखें।