सेल्फ JOIN के साथ प्रत्येक पंक्ति पर समूह गणना दिखाना
प्रत्येक पंक्ति पर उसके अंतिम नाम की कुल आवृत्ति दिखाने के लिए, उपक्वेरी में GROUP BY LastName करके गणना करें, फिर मूल टेबल से JOIN करें।
टेबल और डेटा
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(100),
LastName VARCHAR(100)
);
Query OK, 0 rows affected (1.00 sec)
mysql> INSERT INTO DemoTable(FirstName,LastName) VALUES('David','Miller');
Query OK, 1 row affected (0.35 sec)
mysql> INSERT INTO DemoTable(FirstName,LastName) VALUES('Carol','Miller');
Query OK, 1 row affected (0.37 sec)
mysql> INSERT INTO DemoTable(FirstName,LastName) VALUES('John','Doe');
Query OK, 1 row affected (0.21 sec)
सभी रिकॉर्ड
mysql> SELECT * FROM DemoTable;
+----+-----------+----------+ | Id | FirstName | LastName | +----+-----------+----------+ | 1 | David | Miller | | 2 | Carol | Miller | | 3 | John | Doe | +----+-----------+----------+ 3 rows in set (0.00 sec)
अंतिम नाम गणना कॉलम जोड़ने की क्वेरी
mysql> SELECT Id, FirstName, LastName, Count
FROM DemoTable tbl1
JOIN (
SELECT COUNT(*) AS Count, LastName
FROM DemoTable GROUP BY LastName
) tbl2 USING(LastName);
परिणाम:
+----+-----------+----------+-------+ | Id | FirstName | LastName | Count | +----+-----------+----------+-------+ | 1 | David | Miller | 2 | | 2 | Carol | Miller | 2 | | 3 | John | Doe | 1 | +----+-----------+----------+-------+ 3 rows in set (0.00 sec)
व्याख्या: उपक्वेरी tbl2 प्रत्येक LastName की गणना करती है (Miller: 2, Doe: 1)। मुख्य क्वेरी USING(LastName) से JOIN करती है, जिससे प्रत्येक पंक्ति पर गणना जुड़ जाती है।
विंडो फंक्शन विकल्प (MySQL 8.0+): SELECT Id, FirstName, LastName, COUNT(*) OVER (PARTITION BY LastName) AS Count FROM DemoTable; अधिक सरल और कुशल।