PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

विंडो फ़ंक्शंस के साथ सभी विभाजनों का योग

SELECT ts, a, b, c
       , COALESCE(max(a) OVER (PARTITION BY grp_a), 0)
       + COALESCE(max(b) OVER (PARTITION BY grp_b), 0)
       + COALESCE(max(c) OVER (PARTITION BY grp_c), 0) AS special_sum
FROM  (
   SELECT *
         ,count(a) OVER w AS grp_a
         ,count(b) OVER w AS grp_b
         ,count(c) OVER w AS grp_c
   FROM   t
   WINDOW w AS (ORDER BY ts)
   ) sub
ORDER  BY ts;

सबसे पहले, वास्तविक मान डालें और NULL का पालन करें कुल विंडो फ़ंक्शन वाले समूह में मान count() :यह NULL . के साथ वृद्धि नहीं करता है मान।

फिर max() लें आप जो खोज रहे हैं उस पर पहुंचने के लिए हर समूह से। इस बिंदु पर आप min() . का भी उपयोग कर सकते हैं या sum() , चूंकि प्रति समूह केवल एक गैर-शून्य मान है।

COALESCE() कैच करता है NULL मान यदि समय में समग्र प्रथम मान NULL है ।

ध्यान दें कि मैंने ts को कैसे चुना कॉलम नाम के रूप में, क्योंकि मैं time . जैसे मूल प्रकार के नामों का उपयोग नहीं करता हूं पहचानकर्ता के रूप में।

टेस्ट केस

इसी तरह आप सभी को सबसे पहले नमूना डेटा प्रदान करना चाहिए!

CREATE TEMP TABLE t (ts int, a int, b int, c int);

INSERT INTO t VALUES
  (1, 11,   21,   NULL)
 ,(2, 12,   22,   NULL)
 ,(3, 13,   NULL, NULL)
 ,(4, NULL, 23,   32);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. रैंडम टुपल्स प्राप्त करने के लिए टेबल्स नमूना और अन्य तरीके

  2. कोड कवरेज आँकड़े

  3. PostgreSQL 9.1:डुप्लिकेट के बिना सरणी में पंक्तियों को कैसे संयोजित करें, दूसरी तालिका में शामिल हों

  4. त्रुटि:पूर्णांक के लिए अमान्य इनपुट सिंटैक्स:

  5. Postgres में फ़िल्टर मानदंड के आधार पर गहराई से नेस्टेड JSON ऑब्जेक्ट को कैसे अपडेट करें?