MySQL में सहसंबद्ध सबक्वेरी (correlated subquery) का उपयोग करके प्रत्येक पंक्ति के लिए उस मान की टेबल में कुल घटनाओं की गिनती प्राप्त करें।
उदाहरण: टेबल बनाना और डेटा डालना
mysql> CREATE TABLE DemoTable (
-> Value INT
-> );
Query OK, 0 rows affected (0.61 sec)
mysql> INSERT INTO DemoTable VALUES(20), (30), (20), (40), (30), (20);
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable;
आउटपुट
+-------+ | Value | +-------+ | 20 | | 30 | | 20 | | 40 | | 30 | | 20 | +-------+ 6 rows in set (0.00 sec)
मान 20: 3 बार, 30: 2 बार, 40: 1 बार।
प्रति पंक्ति घटना गिनती के साथ चुनना
mysql> SELECT tbl.Value,
-> (SELECT COUNT(*) FROM DemoTable WHERE Value = tbl.Value) AS Occurrence
-> FROM DemoTable tbl;
आउटपुट
+-------+------------+ | Value | Occurrence | +-------+------------+ | 20 | 3 | | 30 | 2 | | 20 | 3 | | 40 | 1 | | 30 | 2 | | 20 | 3 | +-------+------------+ 6 rows in set (0.00 sec)
व्याख्या: बाहरी क्वेरी की प्रत्येक पंक्ति के लिए (एलियास tbl), आंतरिक सबक्वेरी उस मान की कुल गिनती लौटाती है।
प्रदर्शन चेतावनी: बड़ी टेबल पर धीमा (प्रति पंक्ति सबक्वेरी निष्पादन)।
बेहतर दृष्टिकोण (विंडो फ़ंक्शन - MySQL 8.0+):
SELECT Value, COUNT(*) OVER (PARTITION BY Value) AS Occurrence FROM DemoTable;
या JOIN के साथ एग्रीगेशन:
SELECT t.Value, agg.cnt AS Occurrence FROM DemoTable t JOIN (SELECT Value, COUNT(*) AS cnt FROM DemoTable GROUP BY Value) agg ON t.Value = agg.Value;
ये दृष्टिकोण बड़ी टेबल के लिए बहुत तेज़ हैं।