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

MySQL में एकाधिक कॉलम द्वारा GROUP BY - IF फ़ंक्शन का उपयोग

समाधान: GROUP BY में एकाधिक कॉलम

MySQL में एकाधिक कॉलम द्वारा समूह बनाने के लिए GROUP BY col1, col2, ... का उपयोग करें। IF() फ़ंक्शन का उपयोग सशर्त एग्रीगेशन के लिए किया जा सकता है।

व्यावहारिक उदाहरण

टेबल बनाना और डेटा डालना

mysql> CREATE TABLE MultipleGroupByDemo (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> CustomerId INT,
    -> ProductName VARCHAR(100)
    -> );

mysql> INSERT INTO MultipleGroupByDemo(CustomerId, ProductName) VALUES
    -> (1000, 'Product-1'),
    -> (1001, 'Product-2'), (1001, 'Product-2'), (1001, 'Product-2'),
    -> (1002, 'Product-3'), (1002, 'Product-3'),
    -> (1003, 'Product-4');

मूल डेटा (7 पंक्तियाँ)

IdCustomerIdProductName
11000Product-1
21001Product-2
31001Product-2
41001Product-2
51002Product-3
61002Product-3
71003Product-4

क्वेरी 1: ProductName, CustomerId द्वारा GROUP BY के साथ IF

mysql> SELECT CustomerId, IF(ProductName = 'Product-2', 1, 0)
    -> FROM MultipleGroupByDemo
    -> GROUP BY ProductName, CustomerId;

परिणाम

CustomerIdIF(ProductName = 'Product-2', 1, 0)
10000
10011
10020
10030

क्वेरी 2: CustomerId द्वारा GROUP BY के साथ MAX(IF())

mysql> SELECT CustomerId, MAX(IF(ProductName = 'Product-2', 1, 0))
    -> FROM MultipleGroupByDemo
    -> GROUP BY CustomerId;

परिणाम

CustomerIdMAX(IF(ProductName = 'Product-2', 1, 0))
10000
10011
10020
10030

व्याख्या

  • क्वेरी 1: ProductName, CustomerId जोड़े द्वारा समूह - प्रत्येक अद्वितीय संयोजन के लिए एक पंक्ति
  • क्वेरी 2: केवल CustomerId द्वारा समूह - प्रत्येक ग्राहक के लिए एक पंक्ति, MAX यह जांचता है कि क्या उस ग्राहक के पास Product-2 है
  • IF(condition, 1, 0) बूलियन को 1/0 में बदलता है
  • MAX() किसी भी 1 को ढूंढता है (यदि कम से कम एक Product-2 है तो 1)

सशर्त एग्रीगेशन पैटर्न

SELECT 
    CustomerId,
    SUM(IF(ProductName = 'Product-1', 1, 0)) AS product1_count,
    SUM(IF(ProductName = 'Product-2', 1, 0)) AS product2_count,
    SUM(IF(ProductName = 'Product-3', 1, 0)) AS product3_count,
    COUNT(*) AS total_orders
FROM MultipleGroupByDemo
GROUP BY CustomerId;

आधुनिक SQL (MySQL 8.0+): FILTER क्लॉज

SELECT 
    CustomerId,
    COUNT(*) FILTER (WHERE ProductName = 'Product-2') AS product2_count
FROM MultipleGroupByDemo
GROUP BY CustomerId;

GROUP BY एकाधिक कॉलम - नियम

  • SELECT सूची में सभी गैर-एग्रीगेट कॉलम GROUP BY में होने चाहिए
  • क्रम मायने रखता है: GROUP BY a, b, c
  • फंक्शनल डिपेंडेंसी (ONLY_FULL_GROUP_BY मोड) का पालन किया जाता है
  1. - MySQL में एकाधिक कॉलम पर एकाधिक COUNT करें

    SUM(IF()) के साथ एक क्वेरी में एकाधिक कॉलम की सशर्त गणना एक ही क्वेरी में अलग-अलग कॉलम पर अलग-अलग शर्तों की गणना करने के लिए SUM(IF(condition, 1, 0)) पैटर्न का उपयोग करें। टेबल और डेटा CREATE TABLE DemoTable ( FirstName VARCHAR(100), LastName VARCHAR(100) ); Query OK, 0 rows affected (2.80

  1. - MySQL में एक ही क्वेरी में कई कॉलम के डेटा टाइप को कैसे बदलें?

    MySQL में एक साथ कई कॉलम के डेटा टाइप बदलना MySQL में एक ही ALTER TABLE स्टेटमेंट का उपयोग करके आप एक साथ कई कॉलम के डेटा टाइप को संशोधित कर सकते हैं। इसके लिए सिंटैक्स निम्नलिखित है: ALTER TABLE yourTableName MODIFY COLUMN yourColumnName1 yourDataType1, MODIFY COLUMN yourColumnName2 yourDataType2

  1. - MySQL में एकल क्वेरी में कई कॉलम को एक साथ सॉर्ट करना

    GREATEST() फंक्शन का उपयोग करके पंक्ति-वार अधिकतम के आधार पर सॉर्ट करना कई कॉलम सॉर्ट करने के लिए ORDER BY GREATEST() का उपयोग करें। पहले टेबल बनाएं: create table DemoTable1395 ( Value1 int, Value2 int, Value3 int ); Query OK, 0 rows affected (0.79 sec) रिकॉर्ड डालें: insert into DemoTable1395 val