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

MySQL में डायनामिक पिवट टेबल कैसे बनाएं

पिवट टेबल जानकारी को एक छोटे, प्रबंधनीय डेटा सेट में व्यवस्थित करके बड़ी मात्रा में डेटा का विश्लेषण करना आसान बनाते हैं। हालांकि, MySQL में पिवट हासिल करने के लिए कोई बिल्ट-इन फंक्शन नहीं है। हमें MySQL में पंक्ति को कॉलम में बदलने के लिए एक SQL क्वेरी लिखनी होगी, और फिर MySQL में एक पिवट रिपोर्ट बनाना होगा। तो आइए देखें कि MySQL में डायनेमिक पिवट टेबल कैसे बनाएं।

MySQL में डायनामिक पिवट टेबल कैसे बनाएं

यदि आप MySQL में एक पिवट टेबल बनाना चाहते हैं, तो आप आमतौर पर IF/CASE स्टेटमेंट का उपयोग करेंगे। हालांकि, यह तरीका तभी काम करता है जब आप पिवट टेबल में बनाने के लिए आवश्यक सभी कॉलम पहले से ही जानते हों।

आप MySQL में डायनेमिक पिवट टेबल कैसे बनाते हैं, जब आप कॉलम बनाने के बारे में नहीं जानते हैं, या यदि आप उन्हें समय के साथ बदलने की उम्मीद करते हैं? ऐसे मामलों में, हम GROUP_CONCAT . का उपयोग करते हैं समारोह।

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

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    |
+------+------------+------------+-------------+

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

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

MySQL में डायनामिक पिवट टेबल बनाएं

यदि आप पहले से ही जानते हैं कि पिवट टेबल में कौन से कॉलम बनाने हैं, तो आप पिवट टेबल बनाने के लिए केस स्टेटमेंट का उपयोग कर सकते हैं। हालांकि, MySQL में डायनेमिक पिवट टेबल बनाने के लिए, हम उपयोग करते हैं GROUP_CONCAT पंक्तियों को कॉलम में गतिशील रूप से स्थानांतरित करने के लिए कार्य करता है, जैसा कि नीचे दिखाया गया है।

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when field_key = ''',
      field_key,
      ''' then field_value end) ',
      field_key
    )
  ) INTO @sql 
FROM
  Meeting;
SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' 
                  FROM Meeting 
                   GROUP BY Meeting_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

GROUP_CONCAT आपको कई पंक्तियों के मानों को एक स्ट्रिंग में संयोजित करने की अनुमति देता है। उपरोक्त क्वेरी में, हम field_key में अद्वितीय मानों के आधार पर गतिशील रूप से CASE स्टेटमेंट बनाने के लिए GROUP_CONCAT का उपयोग करते हैं। कॉलम और उस स्ट्रिंग को @sql वैरिएबल में स्टोर करें। फिर इसका उपयोग हमारी चुनिंदा क्वेरी बनाने के लिए किया जाता है।

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

इस तरह आप MySQL में पिवट टेबल क्वेरी को स्वचालित कर सकते हैं।

आप WHERE क्लॉज या जॉइन जोड़कर उपरोक्त क्वेरी को अपनी आवश्यकताओं के अनुसार कस्टमाइज़ कर सकते हैं।

यदि आप केवल चुनिंदा पंक्ति मानों को कॉलम के रूप में पिवट करना चाहते हैं, तो आप अपने पहले चयन GROUP_CONCAT स्टेटमेंट में WHERE क्लॉज जोड़ सकते हैं, जैसा कि बोल्ड में दिखाया गया है। नीचे

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when field_key = ''',
      field_key,
      ''' then field_value end) ',
      field_key
    )
  ) INTO @sql
FROM
  Meeting
WHERE <condition>;

यदि आप अपनी अंतिम पिवट तालिका में पंक्तियों को फ़िल्टर करना चाहते हैं, तो आप अपने SET स्टेटमेंट में WHERE क्लॉज जोड़ सकते हैं जैसा कि बोल्ड में दिखाया गया है। नीचे।

SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' 
                  FROM Meeting WHERE <condition>
                   GROUP BY Meeting_id');

इसी तरह, जब आप MySQL में डायनेमिक पिवट टेबल बनाते हैं, तो आप अपनी SQL क्वेरी में JOINS भी लागू कर सकते हैं।

एक बार जब आप MySQL में डायनेमिक पिवट टेबल बना लेते हैं, तो आप इसे टेबल में प्लॉट करने के लिए रिपोर्टिंग टूल का उपयोग कर सकते हैं। यहां Ubiq का उपयोग करके बनाई गई पिवट तालिका का एक उदाहरण दिया गया है।

क्या आप जानते हैं कि आप बिना कोई SQL लिखे Ubiq में डायनामिक पिवट टेबल बना सकते हैं?

वैसे, यदि आप MySQL डेटाबेस से पिवट टेबल, चार्ट और डैशबोर्ड बनाना चाहते हैं, तो आप 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. तैयार कथन के साथ MySQL पर LIMIT कीवर्ड

  2. MySQL एक तारीख में दिन जोड़ता है

  3. MySQL 5.7 से MySQL 8 में अपग्रेड करने के लिए टिप्स

  4. रोलिंग के आधार पर MySQL से पुरानी पंक्तियों को हटाने का सबसे अच्छा तरीका क्या है?

  5. MySQL, जांचें कि SQL के साथ तालिका में कोई कॉलम मौजूद है या नहीं