MySQL में प्रत्येक विशिष्ट मान की गिनती (COUNT) के साथ DISTINCT मान प्राप्त करने के लिए GROUP BY के साथ एग्रीगेट फंक्शन COUNT(*) का उपयोग करें।
सिंटैक्स
SELECT yourColumnName, COUNT(*) AS count_value
FROM yourTableName
GROUP BY yourColumnName;
उदाहरण के साथ समझें
टेबल बनाएं:
CREATE TABLE selectDistinct_CountDemo (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(10),
AppearanceId INT,
PRIMARY KEY(Id)
);
रिकॉर्ड डालें (Larry 4 बार, John 1 बार, Carol 1 बार):
INSERT INTO selectDistinct_CountDemo(Name, AppearanceId) VALUES('Larry', 1);
INSERT INTO selectDistinct_CountDemo(Name, AppearanceId) VALUES('John', 2);
INSERT INTO selectDistinct_CountDemo(Name, AppearanceId) VALUES('Larry', 3);
INSERT INTO selectDistinct_CountDemo(Name, AppearanceId) VALUES('Larry', 10);
INSERT INTO selectDistinct_CountDemo(Name, AppearanceId) VALUES('Carol', 11);
INSERT INTO selectDistinct_CountDemo(Name, AppearanceId) VALUES('Larry', 15);
सभी रिकॉर्ड देखें:
SELECT * FROM selectDistinct_CountDemo;
आउटपुट:
+----+-------+--------------+
| Id | Name | AppearanceId |
+----+-------+--------------+
| 1 | Larry | 1 |
| 2 | John | 2 |
| 3 | Larry | 3 |
| 4 | Larry | 10 |
| 5 | Carol | 11 |
| 6 | Larry | 15 |
+----+-------+--------------+
DISTINCT नाम और उनकी गिनती
SELECT Name, COUNT(*) AS TotalAppearance
FROM selectDistinct_CountDemo
GROUP BY Name;
परिणाम:
+-------+-----------------+
| Name | TotalAppearance |
+-------+-----------------+
| Larry | 4 |
| John | 1 |
| Carol | 1 |
+-------+-----------------+
क्यों GROUP BY?
DISTINCTकेवल अद्वितीय मान देता है, गिनती नहींGROUP BYपंक्तियों को समूहित करता है, फिरCOUNT(*)प्रत्येक समूह की पंक्तियाँ गिनता है- यह "प्रति समूह गिनती" है, न कि "कुल विशिष्ट गिनती"
कुल विशिष्ट मानों की संख्या (स्केलर)
-- एक संख्या: कुल कितने अलग नाम हैं?
SELECT COUNT(DISTINCT Name) FROM selectDistinct_CountDemo;
-- परिणाम: 3
एकाधिक कॉलम पर GROUP BY
SELECT Name, AppearanceId, COUNT(*) AS cnt
FROM selectDistinct_CountDemo
GROUP BY Name, AppearanceId;
HAVING से फ़िल्टर करें
-- केवल 2+ बार आने वाले नाम
SELECT Name, COUNT(*) AS cnt
FROM selectDistinct_CountDemo
GROUP BY Name
HAVING COUNT(*) > 1;
परिणाम: केवल Larry (4 बार)
ORDER BY गिनती के अनुसार
SELECT Name, COUNT(*) AS cnt
FROM selectDistinct_CountDemo
GROUP BY Name
ORDER BY cnt DESC;
नोट
COUNT(*)सभी पंक्तियाँ गिनता है (NULL सहित)COUNT(column)केवल नॉन-NULL मान गिनता हैCOUNT(DISTINCT column)अद्वितीय नॉन-NULL मान गिनता है- MySQL 8.0+ में
WITH ROLLUPसे योग पंक्ति भी जोड़ सकते हैं