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

MySQL में विशिष्ट मानों की गिनती के लिए क्वेरी कैसे लिखें?


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() (हाइपरलॉगलॉग) उपयोग करें।
  1. - MySQL में क्वेरी मर्ज करके विभिन्न कॉलम में अलग-अलग मानों की गिनती एक ही क्वेरी में प्राप्त करना

    पहले एक टेबल बनाते हैं: mysql> create table DemoTable760 ( ClientId int, ClientId2 int ); Query OK, 0 rows affected (0.79 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable760 values(100,200); Query OK, 1 row affected (0.17 sec) mysql> insert into Demo

  1. - MySQL में टेबल कॉलम में डुप्लिकेट मानों की संख्या गिनें

    GROUP BY HAVING के साथ डुप्लिकेट गिनना किसी कॉलम में कौन से मान डुप्लिकेट हैं और उनकी कितनी बार पुनरावृत्ति हुई है, यह जानने के लिए GROUP BY के साथ 1 का उपयोग करें। टेबल और डेटा CREATE TABLE DemoTable( Data INT ); Query OK, 0 rows affected (0.98 sec) INSERT INTO DemoTable VALUES(80); Query

  1. - विशिष्ट कॉलम मानों के लिए एकल MySQL क्वेरी में एकाधिक काउंट प्राप्त करें

    इसके लिए, आप विशिष्ट कॉलम के लिए पैरामीटर मान के साथ एग्रीगेट फंक्शन SUM() का उपयोग कर सकते हैं। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1790 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20), Score int ); Query OK, 0 rows affected (0.94 sec) इन्सर्ट कमा