COUNT(DISTINCT column) के साथ GROUP BY का उपयोग करें
एक कॉलम के प्रत्येक विशिष्ट मान के लिए दूसरे कॉलम के विशिष्ट मानों की गिनती करने के लिए COUNT(DISTINCT column) के साथ GROUP BY का उपयोग करें।
टेबल बनाना और डेटा डालना
mysql> CREATE TABLE UniqueCountByIPAddress (
Id INT NOT NULL AUTO_INCREMENT,
UserHits INT,
UserIPAddress VARCHAR(50),
PRIMARY KEY(Id)
);
mysql> INSERT INTO UniqueCountByIPAddress(UserHits, UserIPAddress) VALUES(10, '127.0.0.1'); mysql> INSERT INTO UniqueCountByIPAddress(UserHits, UserIPAddress) VALUES(10, '127.0.0.1'); mysql> INSERT INTO UniqueCountByIPAddress(UserHits, UserIPAddress) VALUES(20, '127.0.0.1'); mysql> INSERT INTO UniqueCountByIPAddress(UserHits, UserIPAddress) VALUES(20, '127.0.0.1'); mysql> INSERT INTO UniqueCountByIPAddress(UserHits, UserIPAddress) VALUES(20, '127.0.0.2'); mysql> INSERT INTO UniqueCountByIPAddress(UserHits, UserIPAddress) VALUES(20, '127.0.0.2'); mysql> INSERT INTO UniqueCountByIPAddress(UserHits, UserIPAddress) VALUES(30, '127.0.0.2'); mysql> INSERT INTO UniqueCountByIPAddress(UserHits, UserIPAddress) VALUES(30, '127.0.0.2'); mysql> INSERT INTO UniqueCountByIPAddress(UserHits, UserIPAddress) VALUES(30, '127.0.0.2');
सभी रिकॉर्ड
+----+----------+--------------+ | Id | UserHits | UserIPAddress| +----+----------+--------------+ | 1 | 10 | 127.0.0.1 | | 2 | 10 | 127.0.0.1 | | 3 | 20 | 127.0.0.1 | | 4 | 20 | 127.0.0.1 | | 5 | 20 | 127.0.0.2 | | 6 | 20 | 127.0.0.2 | | 7 | 30 | 127.0.0.2 | | 8 | 30 | 127.0.0.2 | | 9 | 30 | 127.0.0.2 | +----+----------+--------------+
क्वेरी: प्रत्येक UserHits ग्रुप के लिए विशिष्ट IP पते गिनें
mysql> SELECT UserHits, COUNT(DISTINCT UserIPAddress) AS TotalHits FROM UniqueCountByIPAddress GROUP BY UserHits;
आउटपुट
+----------+-----------+ | UserHits | TotalHits | +----------+-----------+ | 10 | 1 | | 20 | 2 | | 30 | 1 | +----------+-----------+
व्याख्या
GROUP BY UserHits—UserHitsके प्रत्येक विशिष्ट मान के लिए एक ग्रुप बनाता है।COUNT(DISTINCT UserIPAddress)— प्रत्येक ग्रुप के भीतर अद्वितीयUserIPAddressमानों की गिनती करता है।- UserHits=10 → केवल 127.0.0.1 (1 विशिष्ट)
- UserHits=20 → 127.0.0.1 और 127.0.0.2 (2 विशिष्ट)
- UserHits=30 → केवल 127.0.0.2 (1 विशिष्ट)
सामान्य विविधताएं
- कुल विशिष्ट मान (पूरी टेबल):
SELECT COUNT(DISTINCT UserIPAddress) FROM UniqueCountByIPAddress; - एकाधिक कॉलम पर विशिष्ट गिनती:
COUNT(DISTINCT col1, col2)(MySQL समर्थन करता है)। - विशिष्ट मानों की सूची:
GROUP_CONCAT(DISTINCT UserIPAddress)।
प्रदर्शन नोट
COUNT(DISTINCT ...)बड़े डेटासेट पर धीमा हो सकता है।- संबंधित कॉलम पर इंडेक्स जोड़ने पर विचार करें।
- अनुमानित गिनती के लिए MySQL 8.0.13+ में
APPROX_COUNT_DISTINCT()(हाइपरलॉगलॉग) उपयोग करें।