MySQL में कई टेबलों की पंक्ति गिनती का योग एकल क्वेरी में प्राप्त करने के लिए UNION ALL के साथ सबक्वेरी और बाहरी SUM() का उपयोग करें। यह प्रत्येक टेबल को अलग से गिनने और फिर परिणाम जोड़ने से अधिक कुशल है।
सिंटैक्स
SELECT SUM(AllCount) AS Total_Count
FROM (
(SELECT COUNT(*) AS AllCount FROM table1)
UNION ALL
(SELECT COUNT(*) AS AllCount FROM table2)
-- अधिक टेबल जोड़ें
) AS combined_counts;
व्यावहारिक उदाहरण
पहली टेबल बनाएं:
mysql> CREATE TABLE DemoTable1 (Id INT, Name VARCHAR(30)); mysql> INSERT INTO DemoTable1 VALUES(10, 'Chris Brown'); mysql> INSERT INTO DemoTable1 VALUES(20, 'David Miller'); mysql> INSERT INTO DemoTable1 VALUES(30, 'John Adam');
दूसरी टेबल बनाएं:
mysql> CREATE TABLE DemoTable2 (Amount INT); mysql> INSERT INTO DemoTable2 VALUES(100); mysql> INSERT INTO DemoTable2 VALUES(200); mysql> INSERT INTO DemoTable2 VALUES(300);
डेटा देखें:
mysql> SELECT * FROM DemoTable1; mysql> SELECT * FROM DemoTable2;
DemoTable1: 3 पंक्तियाँ DemoTable2: 3 पंक्तियाँ
एकल क्वेरी में कुल गिनती
mysql> SELECT SUM(AllCount) AS Total_Count
-> FROM (
-> (SELECT COUNT(*) AS AllCount FROM DemoTable1)
-> UNION ALL
-> (SELECT COUNT(*) AS AllCount FROM DemoTable2)
-> ) t;
परिणाम
+-------------+ | Total_Count | +-------------+ | 6 | +-------------+
क्यों UNION ALL (UNION नहीं)?
| ऑपरेटर | व्यवहार | प्रदर्शन |
|---|---|---|
UNION ALL | सभी पंक्तियां रखता है (डुप्लिकेट सहित) | तेज़ - कोई डुप्लिकेट हटाना नहीं |
UNION | डुप्लिकेट पंक्तियां हटाता है | धीमा - सॉर्ट/अद्वितीय जांच |
गिनती के लिए डुप्लिकेट असंभव हैं (प्रत्येक सबक्वेरी एक पंक्ति लौटाती है), इसलिए UNION ALL हमेशा बेहतर है।
अधिक टेबल जोड़ना
SELECT SUM(cnt) AS GrandTotal FROM (
SELECT COUNT(*) AS cnt FROM table1
UNION ALL SELECT COUNT(*) FROM table2
UNION ALL SELECT COUNT(*) FROM table3
UNION ALL SELECT COUNT(*) FROM table4
) AS totals;
विकल्प: अलग-अलग क्वेरी (कभी-कभी सरल)
SELECT
(SELECT COUNT(*) FROM table1) +
(SELECT COUNT(*) FROM table2) +
(SELECT COUNT(*) FROM table3) AS Total;
उपयोग के मामले
- डैशबोर्ड: कुल उपयोगकर्ता + कुल ऑर्डर + कुल उत्पाद
- माइग्रेशन सत्यापन: स्रोत और लक्ष्य टेबल पंक्ति गिनती मिलान
- रिपोर्टिंग: कई लॉग टेबलों में कुल घटनाएं
- आर्काइविंग: आर्काइव की गई बनाम सक्रिय पंक्तियों का योग
नोट
उपक्वेरी को t या combined_counts जैसे एलियास देना MySQL में आवश्यक है। AllCount कॉलम नाम आंतरिक है; बाहरी SUM() इसी नाम का उपयोग करता है।
यह पैटर्न किसी भी एग्रीगेट फ़ंक्शन (SUM, AVG, MAX, आदि) के साथ काम करता है जब कई टेबलों से स्केलर परिणाम संयोजित करने हों।