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

Postgres . में योग के साथ पुनरावर्ती क्वेरी

यह @a_horse's सही का सरलीकृत संस्करण है उत्तर (टिप्पणियों में ओपी के साथ चर्चा के बाद)।
किसी भी के साथ काम करता है (यथोचित परिमित) रिकर्सन में स्तरों की संख्या।

दिए गए project_id . के लिए कुल मूल्य

WITH RECURSIVE cte AS (
   SELECT project_id AS project_parent, project_value
   FROM   projects
   WHERE  project_id = 1 -- enter id of the base project here !

   UNION  ALL 
   SELECT p.project_id, p.project_value
   FROM   cte
   JOIN   projects p USING (project_parent)
)
SELECT sum(project_value) AS total_value
FROM   cte;

सभी परियोजनाओं के लिए कुल मूल्य

WITH RECURSIVE cte AS (
   SELECT project_id, project_id AS project_parent, project_value
   FROM   projects
   WHERE  project_parent IS NULL  -- all base projects

   UNION  ALL 
   SELECT c.project_id, p.project_id, p.project_value
   FROM   cte c
   JOIN   projects p USING (project_parent)
   )
SELECT project_id, sum(project_value) AS total_value
FROM   cte
GROUP  BY 1
ORDER  BY 1;

db<>fiddle यहां (सही परीक्षण मामले के साथ)
पुराना sqlfiddle



  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. "चेतावनी:sl_table और pg_class के बीच बेमेल पाया गया।" में स्लोनी-आई

  4. PostgreSQL में व्यू कैसे बनाएं

  5. PostgreSQL प्रदर्शन ट्यूनिंग युक्तियाँ