आपको विशिष्ट फ़ंक्शन आयात करने की बिल्कुल भी आवश्यकता नहीं है। विंडो वाले SUM
. का उपयोग करके Postgresql समकक्ष :
SELECT ID, val, 1.0 * val / NULLIF(SUM(val) OVER(),0) AS ratio_to_report
FROM tab
आउटपुट:
╔═════╦══════╦═════════════════════╗
║ id ║ val ║ ratio_to_report ║
╠═════╬══════╬═════════════════════╣
║ 1 ║ 10 ║ 0.16666666666666666 ║
║ 2 ║ 10 ║ 0.16666666666666666 ║
║ 3 ║ 20 ║ 0.3333333333333333 ║
║ 4 ║ 20 ║ 0.3333333333333333 ║
╚═════╩══════╩═════════════════════╝
PARTITION BY
का अनुकरण करने के लिए आप उपयोग कर सकते हैं:
SELECT ID, val, category,
1.0 * val / NULLIF(SUM(val) OVER(PARTITION BY category),0) AS ratio_to_report
FROM tab
आउटपुट:
╔═════╦══════╦═══════════╦═════════════════╗
║ id ║ val ║ category ║ ratio_to_report ║
╠═════╬══════╬═══════════╬═════════════════╣
║ 1 ║ 10 ║ a ║ 0.25 ║
║ 2 ║ 10 ║ a ║ 0.25 ║
║ 3 ║ 20 ║ a ║ 0.5 ║
║ 4 ║ 20 ║ b ║ 1 ║
╚═════╩══════╩═══════════╩═════════════════╝