MySQL में किसी कॉलम में 3 या अधिक बार आने वाले डुप्लिकेट मानों को खोजने के लिए GROUP BY के साथ HAVING COUNT(*) >= 3 का उपयोग करें। यह डेटा गुणवत्ता जांच, डुप्लिकेट पहचान, और आवृत्ति विश्लेषण के लिए मानक पैटर्न है।
सिंटैक्स
SELECT column_name, COUNT(*) AS Frequency FROM table_name GROUP BY column_name HAVING COUNT(*) >= 3;
व्यावहारिक उदाहरण
टेबल बनाएं:
mysql> CREATE TABLE DemoTable1351 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(40)
);
डेटा डालें (बहुत सारे डुप्लिकेट):
mysql> INSERT INTO DemoTable1351(StudentName) VALUES('Chris');
mysql> INSERT INTO DemoTable1351(StudentName) VALUES('Bob');
mysql> INSERT INTO DemoTable1351(StudentName) VALUES('Bob');
mysql> INSERT INTO DemoTable1351(StudentName) VALUES('David');
mysql> INSERT INTO DemoTable1351(StudentName) VALUES('Bob');
mysql> INSERT INTO DemoTable1351(StudentName) VALUES('David');
mysql> INSERT INTO DemoTable1351(StudentName) VALUES('Bob');
mysql> INSERT INTO DemoTable1351(StudentName) VALUES('Mike');
mysql> INSERT INTO DemoTable1351(StudentName) VALUES('David');
डेटा देखें:
mysql> SELECT * FROM DemoTable1351;
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Chris | | 2 | Bob | | 3 | Bob | | 4 | David | | 5 | Bob | | 6 | David | | 7 | Bob | | 8 | Mike | | 9 | David | +-----------+------------+
कम से कम 3 बार आने वाले नाम खोजें
mysql> SELECT StudentName, COUNT(*) AS Frequency
-> FROM DemoTable1351
-> GROUP BY StudentName
-> HAVING COUNT(*) >= 3;
परिणाम
+-------------+-----------+ | StudentName | Frequency | +-------------+-----------+ | Bob | 4 | | David | 3 | +-------------+-----------+
व्याख्या
GROUP BY StudentName- प्रत्येक अद्वितीय नाम के लिए एक समूह बनाता हैCOUNT(*)- प्रत्येक समूह में पंक्तियों की गिनती करता हैHAVING COUNT(*) >= 3- केवल 3+ गिनती वाले समूह रखता है
WHERE बनाम HAVING
| क्लॉज | चरण | एग्रीगेट उपयोग |
|---|---|---|
WHERE | समूहन से पहले (पंक्ति स्तर) | नहीं |
HAVING | समूहन के बाद (समूह स्तर) | हां |
WHERE COUNT(*) >= 3 **काम नहीं करेगा** - एग्रीगेट फ़ंक्शन के लिए HAVING आवश्यक है।
अधिक विवरण के साथ
SELECT StudentName, COUNT(*) AS Frequency, MIN(StudentId) AS FirstId, MAX(StudentId) AS LastId FROM DemoTable1351 GROUP BY StudentName HAVING COUNT(*) >= 3 ORDER BY Frequency DESC;
सभी डुप्लिकेट (2+ बार) खोजें
SELECT StudentName, COUNT(*) FROM DemoTable1351 GROUP BY StudentName HAVING COUNT(*) > 1;
डुप्लिकेट पंक्तियों की पूरी डिटेल देखें
SELECT d.*
FROM DemoTable1351 d
JOIN (
SELECT StudentName
FROM DemoTable1351
GROUP BY StudentName
HAVING COUNT(*) >= 3
) dup ON d.StudentName = dup.StudentName
ORDER BY d.StudentName, d.StudentId;
प्रदर्शन
StudentNameपर इंडेक्सGROUP BYको तेज करता हैHAVINGफिल्टर इंडेक्स के बाद लागू होता है- बड़े टेबल पर
COUNT(*)महंगा हो सकता है - सैंपलिंग या अनुमानित गिनती पर विचार करें
उपयोग के मामले
- डेटा गुणवत्ता: संदिग्ध डुप्लिकेट खाते/रिकॉर्ड खोजें
- धोखाधड़ी पहचान: एक ही उपयोगकर्ता से बार-बार लेनदेन
- इन्वेंटरी: बार-बार ऑर्डर किए गए SKU
- लॉग विश्लेषण: बार-बार होने वाली त्रुटि संदेश
GROUP BY ... HAVING COUNT(*) >= N डुप्लिकेट/आवृत्ति विश्लेषण का मूलभूत SQL पैटर्न है।