MySQL में पिवट-शैली सशर्त गणना
एक ही क्वेरी में विभिन्न श्रेणियों के लिए एकाधिक गणना प्राप्त करने और उन्हें एक पंक्ति में अलग-अलग कॉलम के रूप में प्रदर्शित करने के लिए, SUM() के साथ बूलियन अभिव्यक्तियों का उपयोग करें।
उदाहरण: पसंदीदा रंग गिनती
mysql> CREATE TABLE DemoTable1452 (
-> FavouriteColor VARCHAR(50)
-> );
Query OK, 0 rows affected (2.42 sec)
mysql> INSERT INTO DemoTable1452 VALUES
-> ('Red'), ('Yellow'), ('Yellow'), ('Yellow'),
-> ('Blue'), ('Blue'), ('Red');
Query OK, 7 rows affected (0.31 sec)
mysql> SELECT * FROM DemoTable1452;
+----------------+
| FavouriteColor |
+----------------+
| Red |
| Yellow |
| Yellow |
| Yellow |
| Blue |
| Blue |
| Red |
+----------------+
7 rows in set (0.00 sec)
सशर्त गणना क्वेरी
mysql> SELECT
-> SUM(FavouriteColor = 'Red') AS NumberOfRedColor,
-> SUM(FavouriteColor = 'Yellow') AS NumberOfYellowColor,
-> SUM(FavouriteColor = 'Blue') AS NumberOfBlueColor
-> FROM DemoTable1452;
परिणाम
+------------------+---------------------+-------------------+ | NumberOfRedColor | NumberOfYellowColor | NumberOfBlueColor | +------------------+---------------------+-------------------+ | 2 | 3 | 2 | +------------------+---------------------+-------------------+ 1 row in set (0.27 sec)
यह कैसे काम करता है
- MySQL में, बूलियन अभिव्यक्ति
FavouriteColor = 'Red'का मूल्यांकन 1 (सत्य) या 0 (असत्य) के रूप में होता है SUM()इन 1 और 0 को जोड़ता है, प्रभावी रूप से सत्य शर्तों की गिनती करता है- प्रत्येक SUM() एक अलग कॉलम बन जाता है
CASE स्टेटमेंट विकल्प
SELECT
SUM(CASE WHEN FavouriteColor = 'Red' THEN 1 ELSE 0 END) AS NumberOfRedColor,
SUM(CASE WHEN FavouriteColor = 'Yellow' THEN 1 ELSE 0 END) AS NumberOfYellowColor,
SUM(CASE WHEN FavouriteColor = 'Blue' THEN 1 ELSE 0 END) AS NumberOfBlueColor
FROM DemoTable1452;
लाभ
- एकल टेबल स्कैन: टेबल को केवल एक बार पढ़ता है
- एक पंक्ति आउटपुट: रिपोर्टिंग/डैशबोर्ड के लिए आसान
- कोई GROUP BY आवश्यक नहीं: पूरी टेबल का सारांश
- अनुकूलनीय: आसानी से अधिक श्रेणियां जोड़ें
डायनामिक श्रेणियों के लिए (उन्नत)
यदि श्रेणियाँ अज्ञात हैं, तो एप्लिकेशन कोड में डायनामिक SQL तैयार करें या GROUP_CONCAT के साथ पिवट तर्क का उपयोग करें।