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

PostgreSQL में मनमाने ढंग से कई पंक्तियों को कॉलम में बदलना

Postgres (और अन्य RDBMS) में पिवट टेबल के साथ मुख्य समस्या यह है कि एक क्वेरी परिणाम की संरचना (संख्या और कॉलम के नाम) चयनित डेटा के आधार पर भिन्न नहीं हो सकती है। संभावित समाधानों में से एक गतिशील रूप से एक दृश्य बनाना है, जो संरचना डेटा द्वारा परिभाषित की जाती है। उदाहरण फ़ंक्शन तालिका के आधार पर एक दृश्य बनाता है example_table :

create or replace function create_pivot_view()
returns void language plpgsql as $$
declare
    list text;
begin
    select string_agg(format('jdata->>%1$L "%1$s"', name), ', ')
    from (
        select distinct name
        from example_table
        ) sub
    into list;

    execute format($f$
        drop view if exists example_pivot_view;
        create view example_pivot_view as
        select lbl, %s
        from (
            select lbl, json_object_agg(name, value) jdata
            from example_table
            group by 1
            order by 1
            ) sub
        $f$, list);
end $$;

तालिका संशोधित होने के बाद फ़ंक्शन का उपयोग करें (शायद एक ट्रिगर में) और बनाए गए दृश्य को क्वेरी करें:

select create_pivot_view();

select *
from example_pivot_view;

 lbl | num | colour | percentage 
-----+-----+--------+------------
   1 | 1   | Red    | 25.0
   2 | 2   | Green  | 50.0
   3 | 3   | Blue   | 75.0
(3 rows)

इसे db<>fiddle.

. में टेस्ट करें

ध्यान दें, तालिका में एक नया नाम जोड़े जाने के बाद (या इसमें से कुछ नाम हटा दिया जाता है) केवल एक दृश्य (फ़ंक्शन को कॉल करें) को फिर से बनाना आवश्यक है। यदि अलग-अलग नामों का सेट नहीं बदलता है, तो आप दृश्य को फिर से बनाए बिना क्वेरी कर सकते हैं। यदि सेट को बार-बार संशोधित किया जाता है तो अस्थायी दृश्य बनाना एक बेहतर विकल्प होगा।

आपकी रुचि किसी JSONB फ़ील्ड से फ़्लैटन एग्रीगेटेड की/वैल्यू पेयर में भी हो सकती है?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Haproxy और Keepalived की स्थापना कैसे करें

  2. पोस्टग्रेज में सिंगल यूजर मोड में टेबल बनाना

  3. PostgreSql:लेटरल जॉइन का उपयोग करके पंक्तियों के लिए Json Array

  4. PostgreSQL में AT TIME ZONE कैसे काम करता है

  5. PostgreSQL क्वेरी इंडेक्स स्कैन के साथ तेजी से चलती है, लेकिन इंजन हैश जॉइन चुनता है