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

MySQL में SELECT DISTINCT और COUNT साथ में कैसे करें?

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 से योग पंक्ति भी जोड़ सकते हैं
  1. - MySQL में शर्त के साथ ORDER BY और SELECT कैसे करें?

    कंडीशनल ORDER BY: जीरो वैल्यू अंत में किसी कॉलम को सॉर्ट करते समय खास मान (जैसे 0) को अंत में रखने और बाकी को नॉर्मल ऑर्डर में रखने के लिए बूलियन एक्सप्रेशन का उपयोग करें। सिंटैक्स SELECT * FROM yourTableName ORDER BY yourColumnName = 0, yourColumnName; टेबल बनाना और डेटा इन्सर्ट करना CREATE TABL

  1. - MySQL UNION SELECT और IN क्लॉज एक ही क्वेरी में

    UNION और IN क्लॉज को संयोजित करना पहले टेबल बनाएं: create table DemoTable1 ( StudentId int, StudentName varchar(20) ); Query OK, 0 rows affected (1.24 sec) रिकॉर्ड डालें: insert into DemoTable1 values(210,Adam); Query OK, 1 row affected (0.11 sec) सभी रिकॉर्ड देखें: select * from DemoTable1; आउटप

  1. - MySQL में DISTINCT कॉलम से औसत कैसे चुनें?

    MySQL में विशिष्ट (DISTINCT) मानों के आधार पर औसत निकालने के लिए, सबक्वेरी में DISTINCT का उपयोग करके डुप्लिकेट हटाएं, फिर बाहरी क्वेरी में AVG() लागू करें। उदाहरण: विशिष्ट छात्र-मान संयोजनों का औसत डेमो टेबल बनाएं: mysql> CREATE TABLE DemoTable1934 ( StudentName VARCHAR(20), StudentMa