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

पुनरावर्ती प्रश्नों का उपयोग करके एक पदानुक्रमित वृक्ष-संरचना संरचना को पीछे की ओर कैसे पार करें

अद्यतन 2: मैं मूल पुनरावर्ती क्वेरी को फिर से लिखता हूं ताकि सभी संचय/एकत्रीकरण पुनरावर्ती भाग के बाहर किया जा सके। इसे इस उत्तर के पिछले संस्करण की तुलना में बेहतर प्रदर्शन करना चाहिए। यह बहुत हद तक answer जैसा है। इसी तरह के प्रश्न के लिए @a_horse_with_no_name से।

  WITH 
    RECURSIVE search_graph(edge, from_node, to_node, length, area, start_node) AS
    (
        SELECT edge, from_node, to_node, length, area, from_node AS "start_node"
        FROM tree
        UNION ALL
        SELECT o.edge, o.from_node, o.to_node, o.length, o.area, p.start_node
        FROM tree o
    JOIN search_graph p ON p.from_node = o.to_node
    )
    SELECT array_agg(edge) AS "edges"
       -- ,array_agg(from_node) AS "nodes"
          ,count(edge) AS "edge_count"
          ,sum(length) AS "length_sum"
          ,sum(area) AS "area_sum"
    FROM search_graph
    GROUP BY start_node
    ORDER BY start_node
;

परिणाम अपेक्षित हैं:

 start_node | edges       | edge_count | length_sum |  area_sum
------------+-------------+------------+------------+------------
  1         | {A}         |          1 |        1.1 |       0.9
  2         | {B}         |          1 |        1.2 |       1.3
  3         | {C}         |          1 |        1.8 |       2.4
  4         | {D,B,A}     |          3 |        3.5 |       3.5
  5         | {E,D,C,B,A} |          5 |        6.4 |       6.8



  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. द्वारा प्राकृतिक क्रम को पोस्टग्रेज करता है

  4. लेफ्ट जॉइन से अपडेट पोस्टग्रेज करें

  5. कैसे make_interval () PostgreSQL में काम करता है