समाधान: GROUP BY के साथ COUNT(*)
किसी कॉलम के अद्वितीय मान प्राप्त करने और प्रत्येक की घटनाओं की गणना करने के लिए GROUP BY क्लॉज का उपयोग करें।
सिंटैक्स
SELECT yourColumnName, COUNT(*) AS anyAliasName FROM yourTableName GROUP BY yourColumnName;
व्यावहारिक उदाहरण
टेबल बनाना और डेटा डालना
mysql> CREATE TABLE GroupByAndCountDemo (
-> ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ClientName VARCHAR(100)
-> );
mysql> INSERT INTO GroupByAndCountDemo(ClientName) VALUES
-> ('John'), ('Carol'), ('Sam'), ('Sam'), ('John'), ('John'), ('John'),
-> ('Sam'), ('Sam'), ('Sam'), ('John'), ('John'), ('John'), ('David'), ('Maxwell'), ('Maxwell');
मूल डेटा (16 पंक्तियाँ)
John: 7, Carol: 1, Sam: 5, David: 1, Maxwell: 2
GROUP BY क्वेरी
mysql> SELECT ClientName, COUNT(*) AS TotalCount
-> FROM GroupByAndCountDemo
-> GROUP BY ClientName;
परिणाम
| ClientName | TotalCount |
|---|---|
| John | 7 |
| Carol | 1 |
| Sam | 5 |
| David | 1 |
| Maxwell | 2 |
उन्नत विविधताएं
गणना द्वारा क्रमबद्ध
SELECT ClientName, COUNT(*) AS TotalCount FROM GroupByAndCountDemo GROUP BY ClientName ORDER BY TotalCount DESC;
HAVING के साथ फ़िल्टर (केवल 2 से अधिक वाले)
SELECT ClientName, COUNT(*) AS TotalCount FROM GroupByAndCountDemo GROUP BY ClientName HAVING COUNT(*) > 2;
एकाधिक कॉलम द्वारा समूह
SELECT Department, Status, COUNT(*) FROM Employees GROUP BY Department, Status;
DISTINCT vs GROUP BY
| विशेषता | DISTINCT | GROUP BY |
|---|---|---|
| उद्देश्य | अद्वितीय मान | समूह + एग्रीगेशन |
| गिनती | नहीं (अलग क्वेरी) | हाँ (COUNT(*)) |
| क्रमबद्ध | अंतर्निहित नहीं | ORDER BY के साथ |
| फ़िल्टर समूह | नहीं | HAVING के साथ |
प्रदर्शन टिप
GROUP BY कॉलम पर इंडेक्स बनाने से प्रदर्शन में काफी सुधार होता है।