Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL क्वेरी परिणाम में कॉलम मानों को कॉलम नामों में कैसे बदलें (Pivot/Transpose)?


MySQL में CASE स्टेटमेंट का उपयोग करके पंक्तियों को कॉलम में बदलना (Pivot)

आप CASE स्टेटमेंट और एग्रीगेट फ़ंक्शन का उपयोग करके कॉलम मानों को कॉलम नामों में बदल सकते हैं।

सिंटैक्स

SELECT yourIdColumnName,
    MAX(CASE WHEN yourColumnName1 = 'value1' THEN yourColumnName2 ELSE NULL END) AS 'value1',
    MAX(CASE WHEN yourColumnName1 = 'value2' THEN yourColumnName2 ELSE NULL END) AS 'value2',
    ...
FROM yourTableName
GROUP BY yourIdColumnName
ORDER BY yourIdColumnName;

उदाहरण

टेबल बनाएं:

mysql> create table valueAsColumn (
    -> UserId int,
    -> UserColumn1 varchar(10),
    -> UserColumn2 varchar(10)
    -> );

डेटा डालें:

mysql> insert into valueAsColumn values(0, 'John', 'A+');
mysql> insert into valueAsColumn values(0, 'Carol', 'B');
mysql> insert into valueAsColumn values(0, 'Sam', 'C');
mysql> insert into valueAsColumn values(1, 'John', 'D');
mysql> insert into valueAsColumn values(1, 'Carol', 'A');
mysql> insert into valueAsColumn values(1, 'Carol', 'C');

पिवट क्वेरी:

mysql> select UserId,
    -> max(case when (UserColumn1 = 'John') then UserColumn2 else NULL end) as 'John',
    -> max(case when (UserColumn1 = 'Carol') then UserColumn2 else NULL end) as 'Carol',
    -> max(case when (UserColumn1 = 'Sam') then UserColumn2 else NULL end) as 'Sam'
    -> from valueAsColumn
    -> group by UserId
    -> order by UserId;

परिणाम:

+--------+------+-------+------+
| UserId | John | Carol | Sam  |
+--------+------+-------+------+
|      0 | A+   | B     | C    |
|      1 | D    | C     | NULL |
+--------+------+-------+------+

व्याख्या

  • CASE WHEN UserColumn1 = 'John' THEN UserColumn2: John के लिए UserColumn2 मान
  • MAX(...): एकाधिक मान होने पर अधिकतम लेता है (या कोई भी एग्रीगेट)
  • GROUP BY UserId: प्रत्येक UserId के लिए एक पंक्ति

डायनामिक पिवट (MySQL 8.0+)

ज्ञात मानों के लिए उपरोक्त विधि काम करती है। अज्ञात/डायनामिक मानों के लिए तैयार स्टेटमेंट या एप्लिकेशन कोड में पिवट करें।

  1. - MySQL में विशिष्ट मानों की घटनाओं को गिनें और नए कॉलम में परिणाम प्रदर्शित करें

    COUNT(*) के साथ GROUP BY का उपयोग करके प्रत्येक विशिष्ट मान की घटनाओं को गिनें। टेबल बनाना और डेटा डालना CREATE TABLE DemoTable (Value INT); Query OK, 0 rows affected (0.57 sec) INSERT INTO DemoTable VALUES(80),(90),(90),(80),(100),(90); सभी रिकॉर्ड देखना SELECT * FROM DemoTable; आउटपुट: +----

  1. - MySQL में पंक्तियों के मान जोड़कर परिणाम सॉर्ट करना

    GROUP BY और ORDER BY से समूहवार योग और क्रम SUM() और GROUP BY से प्रत्येक समूह का योग निकालें, फिर ORDER BY से परिणाम क्रमबद्ध करें। तालिका और डेटा (Chris, 45), (David, 98), (Bob, 58); क्वेरी: नामवार कुल अंक, अवरोही क्रम ORDER BY TotalSum DESC; परिणाम +-------------+----------+ | StudentName

  1. - MySQL में एक क्वेरी में सभी कॉलम नामों के लिए उपनाम (alias) कैसे सेट करें

    सिंटैक्स SELECT yourColumnName1 AS aliasName1, yourColumnName2 AS aliasName2 FROM yourTableName AS tableAlias; उदाहरण टेबल बनाएं: ); डेटा डालें: INSERT INTO DemoTable2014 VALUES (Chris, Brown); उपनाम के साथ क्वेरी FROM DemoTable2014 tbl; परिणाम +------------------+-----------------+ | Studen