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

MySQL में UNION ALL से विभिन्न टेबलों की गिनती का योग एकल क्वेरी में प्राप्त करें

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, आदि) के साथ काम करता है जब कई टेबलों से स्केलर परिणाम संयोजित करने हों।

  1. - MySQL में विशिष्ट सेल्स से SUM प्राप्त करना

    शर्त के साथ विशिष्ट पंक्तियों का योग WHERE क्लॉज के साथ SUM() एग्रीगेट फ़ंक्शन का उपयोग करके केवल विशिष्ट शर्त पूरी करने वाली पंक्तियों का योग निकाला जा सकता है। तालिका और डेटा INSERT INTO DemoTable1370 VALUES(Chris Brown,77); विशिष्ट छात्र के अंकों का योग WHERE StudentName = Adam Smith; परिण

  1. - MySQL में अलग-अलग टेबल से NOT NULL मानों की गिनती एक क्वेरी में

    सबक्वेरी से कई टेबल की नॉन-NULL गिनती COUNT(column) NULL मानों को स्वचालित रूप से बाहर करता है। सबक्वेरी के साथ कई टेबल की गिनती एक साथ प्राप्त करें। पहली टेबल INSERT INTO DemoTable1 VALUES(1), (NULL), (2), (3); दूसरी टेबल INSERT INTO DemoTable2 VALUES(10), (NULL), (NULL); एक क्वेरी में दोनों

  1. - MySQL में कॉमा से अलग स्ट्रिंग से विशिष्ट स्थिति का मान कैसे प्राप्त करें?

    MySQL में SUBSTRING_INDEX() फ़ंक्शन का उपयोग करके कॉमा से अलग स्ट्रिंग से विशिष्ट स्थिति का मान निकाला जा सकता है। सिंटैक्स SUBSTRING_INDEX(SUBSTRING_INDEX(str, delim, n), delim, -1) यह n-वें डिलिमिटर के बाद के भाग को लौटाता है। उदाहरण तालिका बनाएं: mysql> CREATE TABLE DemoTable (ListOfSubject