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

PostgreSQL में पिवट टेबल कैसे बनाएं

पिवट टेबल बड़ी मात्रा में डेटा को अधिक प्रबंधनीय प्रारूप में व्यवस्थित करके विश्लेषण करने का एक उपयोगी तरीका है। यहाँ PostgreSQL में पिवट टेबल बनाने का तरीका बताया गया है। दूसरे शब्दों में, हम PostgreSQL में क्रॉसस्टैब बनाएंगे।

PostgreSQL में पिवट टेबल कैसे बनाएं

PostgreSQL में पिवट टेबल बनाने के कम से कम कुछ तरीके हैं। एक वह जगह है जहां हम CASE स्टेटमेंट का उपयोग करके PostgreSQL में कॉलम में पंक्तियों को पिवट करते हैं, और दूसरा PostgreSQL क्रॉसस्टैब फ़ंक्शन का एक सरल उदाहरण है।

मान लें कि आपके पास निम्न तालिका है

CREATE TABLE Meeting
(
    ID INT,
    Meeting_id INT,
    field_key VARCHAR(100),
    field_value VARCHAR(100)
);

INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (1, 1,'first_name' , 'Alec');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (2, 1,'last_name' , 'Jones');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (3, 1,'occupation' , 'engineer');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (4,2,'first_name' , 'John');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (5,2,'last_name' , 'Doe');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (6,2,'occupation' , 'engineer');

+------+------------+------------+-------------+
| ID   | Meeting_id | field_key  | field_value |
+------+------------+------------+-------------+
|    1 |          1 | first_name | Alec        |
|    2 |          1 | last_name  | Jones       |
|    3 |          1 | occupation | engineer    |
|    4 |          2 | first_name | John        |
|    5 |          2 | last_name  | Doe         |
|    6 |          2 | occupation | engineer    |
+------+------------+------------+-------------+

मान लें कि आप PostgreSQL में पिवट टेबल बनाना चाहते हैं, जैसे कि field_key में प्रत्येक अद्वितीय मान के लिए एक नया कॉलम बनाया जाता है। कॉलम, यानी (first_name, last_name, पेशा) जैसा कि नीचे दिखाया गया है

+------------+-------------+-------------+-------------+
| Meeting_id | first_name  |  last_name  |  occupation |
+------------+-------------+-------------+-------------+
|          1 |       Alec  | Jones       | engineer    |
|          2 |       John  | Doe         | engineer    |
+------------+-------------+-------------+-------------+

केस स्टेटमेंट का उपयोग करके PostgreSQL में पिवट टेबल बनाएं

आप CASE स्टेटमेंट का उपयोग करके उपरोक्त तालिका में पंक्तियों को आसानी से कॉलम में स्थानांतरित कर सकते हैं,

postgresql> select meeting_Id,
         max(case when (field_key='first_name') then field_value else NULL end) as first_name,
         max(case when (field_key='last_name') then field_value else NULL end) as last_name,
         max(case when (field_key='occupation') then field_value else NULL end) as occupation
         from meeting
         group by meeting_Id
         order by meeting_Id;
+------------+------------+-----------+------------+
| meeting_Id | first_name | last_name | occupation |
+------------+------------+-----------+------------+
|          1 | Alec       | Jones     | engineer   |
|          2 | John       | Doe       | engineer   |
+------------+------------+-----------+------------+

उपरोक्त कथन में, प्रत्येक पंक्ति की field_key मान चेक किया गया है और तदनुसार कॉलम पॉप्युलेट किए गए हैं। उदाहरण के लिए, अगर field_key मान 'first_name' है फिर first_name कॉलम भरा हुआ है, इत्यादि।

एक बार जब आप PostgreSQL में पिवट टेबल बना लेते हैं, तो आप इसे टेबल में प्लॉट करने के लिए रिपोर्टिंग टूल का उपयोग कर सकते हैं। यहाँ Ubiq का उपयोग करके बनाई गई पिवट तालिका का एक उदाहरण दिया गया है। क्या आप जानते हैं कि Ubiq आपको बिना कोई SQL लिखे पिवट टेबल बनाने की अनुमति देता है?

बोनस पढ़ें: रेडशिफ्ट में रनिंग टोटल की गणना कैसे करें

Crosstab फ़ंक्शन का उपयोग करके PostgreSQL में पिवट टेबल बनाएं

PostgreSQL एक अंतर्निहित क्रॉसस्टैब फ़ंक्शन भी प्रदान करता है जो आपको PostgreSQL में आसानी से पिवट तालिका बनाने की अनुमति देता है। हालांकि, आपको table_func . को स्थापित करने की आवश्यकता है क्रॉसस्टैब फ़ंक्शन को सक्षम करने के लिए एक्सटेंशन।

postgresql> CREATE EXTENSION IF NOT EXISTS tablefunc;

मान लें कि आपके पास निम्न तालिका है।

CREATE TABLE exams (
id int(11) NOT NULL auto_increment,
name varchar(15),
exam int,
score int,
PRIMARY KEY (id)
);

insert into exams (name,exam,score) values ('Bob',1,70);
insert into exams (name,exam,score) values ('Bob',2,77);
insert into exams (name,exam,score) values ('Bob',3,71);
insert into exams (name,exam,score) values ('Bob',4,70);

insert into exams (name,exam,score) values ('Sue',1,89);
insert into exams (name,exam,score) values ('Sue',2,87);
insert into exams (name,exam,score) values ('Sue',3,88);
insert into exams (name,exam,score) values ('Sue',4,89);

mysql> select * from exams;
+------+------+------+-------+
| id   | name | exam | score |
+------+------+------+-------+
|   1  |  Bob |   1  |   70  |
|   2  |  Bob |   2  |   77  |
|   3  |  Bob |   3  |   71  |
|   4  |  Bob |   4  |   70  |
|   5  |  Sue |   1  |   89  |
|   6  |  Sue |   2  |   87  |
|   7  |  Sue |   3  |   88  |
|   8  |  Sue |   4  |   89  |
+------+------+------+-------+

मान लें कि आप उपरोक्त तालिका को परीक्षा . द्वारा पिवट करना चाहते हैं कॉलम, जैसे कि प्रत्येक छात्र के लिए आपको 1 पंक्ति मिलती है, सभी परीक्षा स्कोर अलग-अलग कॉलम के रूप में, जैसा कि नीचे दिखाया गया है।

 name | exam1 | exam2 | exam3 | exam4
------+-------+-------+-------+-------
 Bob  |    70 |    77 |    71 |    70
 Sue  |    89 |    87 |    88 |    89

चूंकि हमने अपने डेटाबेस के लिए क्रॉसस्टैब फ़ंक्शन को सक्षम किया है, आप PostgreSQL में क्रॉसस्टैब बनाने के लिए निम्न क्वेरी का उपयोग कर सकते हैं।

postgres=# SELECT * FROM crosstab('select name, exam, score from exams order by 1,2')
             AS ct (name varchar(15),exam1 int, exam2 int, exam3 int, exam4 int);
 name | exam1 | exam2 | exam3 | exam4
------+-------+-------+-------+-------
 Bob  |    70 |    77 |    71 |    70
 Sue  |    89 |    87 |    88 |    89

क्रॉसस्टैब अपने इनपुट पैरामीटर के रूप में एक SELECT क्वेरी के साथ काम करता है जिसे 3 आवश्यकताओं का पालन करना चाहिए

  • इसे 3 कॉलम लौटाने होंगे
  • पहला कॉलम आपकी अंतिम पिवट टेबल जैसे नाम के लिए पंक्ति पहचानकर्ता है
  • दूसरा कॉलम पिवोट किया जाने वाला श्रेणी कॉलम है, जैसे परीक्षा
  • तीसरा कॉलम वह मान कॉलम है जिसे आप पिवट करना चाहते हैं जैसे स्कोर

क्रॉसस्टैब आपकी सेलेक्ट क्वेरी का परिणाम लेगा, और आपकी पिवट टेबल के लिए आपके द्वारा बताए गए कॉलम के आधार पर उसमें से पिवट टेबल बनाएगा। ऊपर दी गई क्वेरी में, पिवट टेबल को एक अस्थायी टेबल ct(name varchar(15),exam1 int, exam2 int, exam3 int, exam4 int) में स्टोर किया जाता है। आपको अपनी अंतिम पिवट टेबल के कॉलम नाम और डेटा प्रकार को परिभाषित करना होगा।

बोनस पढ़ें: रेडशिफ्ट में मूविंग एवरेज की गणना कैसे करें

हमारी राय में, यदि आप PostgreSQL में पिवट टेबल बनाना चाहते हैं, तो हमने पाया कि क्रॉसस्टैब विधि CASE स्टेटमेंट का उपयोग करने की तुलना में अधिक कठिन है, मुख्यतः क्योंकि क्रॉसस्टैब त्रुटियों को फेंकता है यदि आप अंतिम पिवट टेबल के कॉलम डेटा प्रकारों को सही ढंग से परिभाषित नहीं करते हैं।

फिर भी, अब आप PostgreSQL में पिवट टेबल बनाने के दो तरीके जानते हैं। आप उन्हें अपनी आवश्यकता के अनुसार अनुकूलित कर सकते हैं।

क्या आप जानते हैं कि आप केवल ड्रैग एंड ड्रॉप का उपयोग करके Ubiq में पिवट टेबल बना सकते हैं?

वैसे, यदि आप PostgreSQL डेटाबेस से पिवट टेबल, चार्ट और डैशबोर्ड बनाना चाहते हैं, तो आप Ubiq को आज़मा सकते हैं। हम 14-दिन का निःशुल्क परीक्षण प्रदान करते हैं।

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql एडेप्टर (pg):सर्वर से कनेक्ट नहीं हो सका

  2. डॉकटर कंटेनर के अंदर चल रहे PostgreSQL की निगरानी कैसे करें:भाग दो

  3. IntegrityError डुप्लिकेट कुंजी मान अद्वितीय बाधा का उल्लंघन करता है - django/postgres

  4. Django + Psycopg2:InterfaceError:केवल प्रोटोकॉल 3 समर्थित

  5. PostgreSQL में दोष सहिष्णुता का विकास