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

MySQL में GROUP BY और HAVING का उपयोग करके केवल अद्वितीय मान प्राप्त करना

MySQL में किसी कॉलम में केवल उन्हीं मानों को प्राप्त करने के लिए जो ठीक एक बार आते हैं (डुप्लिकेट नहीं), GROUP BY के साथ HAVING COUNT(*) = 1 का उपयोग करें।

सिंटैक्स

SELECT column_name FROM table_name 
GROUP BY column_name 
HAVING COUNT(*) = 1;

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

1. टेबल बनाएं और डुप्लिकेट डेटा डालें

mysql> CREATE TABLE DemoTable723 (Value INT);
Query OK, 0 rows affected (0.58 sec)

mysql> INSERT INTO DemoTable723 VALUES 
(100), (200), (200), (100), (300), (400), (400), (600), (400), (200);
Query OK, 10 rows affected (0.15 sec)

2. सभी रिकॉर्ड्स देखें

mysql> SELECT * FROM DemoTable723;
+-------+
| Value |
+-------+
| 100   |
| 200   |
| 200   |
| 100   |
| 300   |
| 400   |
| 400   |
| 600   |
| 400   |
| 200   |
+-------+
10 rows in set (0.00 sec)

3. केवल अद्वितीय मान प्राप्त करें (जो ठीक एक बार आते हैं)

mysql> SELECT * FROM DemoTable723 
GROUP BY Value 
HAVING COUNT(Value) = 1;
+-------+
| Value |
+-------+
| 300   |
| 600   |
+-------+
2 rows in set (0.00 sec)

व्याख्या

  • 100 - 2 बार आता है → बाहर
  • 200 - 3 बार आता है → बाहर
  • 300 - 1 बार आता है → शामिल
  • 400 - 3 बार आता है → बाहर
  • 600 - 1 बार आता है → शामिल

वैकल्पिक तरीके

सबक्वेरी के साथ

SELECT Value FROM DemoTable723 
WHERE Value IN (
    SELECT Value FROM DemoTable723 
    GROUP BY Value HAVING COUNT(*) = 1
);

विंडो फ़ंक्शन (MySQL 8.0+)

SELECT Value FROM (
    SELECT Value, COUNT(*) OVER (PARTITION BY Value) AS cnt
    FROM DemoTable723
) t WHERE cnt = 1;

संबंधित पैटर्न

आवश्यकताक्वेरी
केवल डुप्लिकेट मान (1 से अधिक बार)HAVING COUNT(*) > 1
डुप्लिकेट की गिनती सहितSELECT Value, COUNT(*) FROM ... GROUP BY Value HAVING COUNT(*) > 1
प्रत्येक मान की पहली घटनाSELECT * FROM ... GROUP BY Value (MySQL एक्सटेंशन)
सभी अद्वितीय मान (DISTINCT)SELECT DISTINCT Value FROM ...

प्रदर्शन नोट

GROUP BY + HAVING के लिए कॉलम पर इंडेक्स होने से क्वेरी तेज़ होती है।

  1. - MySQL में GROUP BY और MIN() से डुप्लिकेट कॉलम मान वाले समूह का न्यूनतम मान प्राप्त करें

    किसी कॉलम (जैसे Class) के डुप्लिकेट मान वाले समूहों में से दूसरे कॉलम (जैसे Amount) का न्यूनतम मान प्राप्त करने के लिए GROUP BY और MIN() एग्रीगेट फ़ंक्शन का उपयोग करें। टेबल बनाएं mysql> CREATE TABLE DemoTable1875 ( Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, Class VARCHAR(20), Amoun

  1. - MySQL में SUBSTRING_INDEX का उपयोग करके हाइफ़न से अलग स्ट्रिंग को कई कॉलम्स में विभाजित करें

    MySQL में SUBSTRING_INDEX का उपयोग करके विभाजक द्वारा स्ट्रिंग पार्सिंग MySQL का SUBSTRING_INDEX() फ़ंक्शन एक स्ट्रिंग को विभाजक द्वारा विभाजित करने और विशिष्ट भाग निकालने के लिए अत्यंत उपयोगी है। यह CSV-शैली डेटा या संयुक्त फ़ील्ड्स को पार्स करने के लिए आदर्श है। टेबल बनाना ); Query OK, 0 rows af

  1. - MySQL में डुप्लिकेट आईडी के लिए फ्लोटिंग कॉलम का न्यूनतम मान प्राप्त करें

    GROUP BY और MIN() से डुप्लिकेट आईडी समूह की न्यूनतम कीमत पाएं डुप्लिकेट आईडी वाले समूहों में फ्लोटिंग-पॉइंट कॉलम का न्यूनतम मान प्राप्त करने के लिए MIN() के साथ GROUP BY का उपयोग करें। टेबल बनाएं और डेटा डालें: mysql> create table DemoTable2005 ( Id int, Price float ); Query OK, 0 rows affected (