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

क्या MySQL में SUM() के साथ IF() उपयोग कर सकते हैं?

हां, MySQL में SUM() के साथ IF() फ़ंक्शन का उपयोग करके आप सशर्त गिनती या योग गणना कर सकते हैं। यह पिवट टेबल, सशर्त एग्रीगेशन, और क्रॉस-टैब रिपोर्ट के लिए शक्तिशाली तकनीक है।

उदाहरण तालिका बनाना

mysql> CREATE TABLE DemoTable (Value INT, Value2 INT);

डेटा डालना

mysql> INSERT INTO DemoTable VALUES (100, 400), (100, 400), (400, 100);

डेटा देखना

mysql> SELECT * FROM DemoTable;

आउटपुट:

+-------+--------+
| Value | Value2 |
+-------+--------+
| 100   | 400    |
| 100   | 400    |
| 400   | 100    |
+-------+--------+

SUM() के साथ IF() का उपयोग करके 100 और 400 की गिनती

mysql> SELECT 
    -> SUM(IF(Value = 100, 1, 0) + IF(Value2 = 100, 1, 0)) AS Hundred,
    -> SUM(IF(Value = 400, 1, 0) + IF(Value2 = 400, 1, 0)) AS FourHundred
    -> FROM DemoTable;

आउटपुट:

+---------+--------------+
| Hundred | FourHundred  |
+---------+--------------+
| 3       | 3            |
+---------+--------------+

व्याख्या:

  • प्रत्येक पंक्ति के लिए, IF(Value=100, 1, 0) जांचता है कि Value 100 है या नहीं
  • दोनों कॉलम (Value, Value2) के लिए जांच करके जोड़ा जाता है
  • SUM() सभी पंक्तियों के लिए 1s को जोड़ता है
  • परिणाम: 100 कुल 3 बार आता है (पंक्ति1: Value, पंक्ति2: Value, पंक्ति3: Value2), 400 भी 3 बार

समान विकल्प (CASE):

SELECT 
    SUM(CASE WHEN Value = 100 THEN 1 ELSE 0 END + CASE WHEN Value2 = 100 THEN 1 ELSE 0 END) AS Hundred,
    SUM(CASE WHEN Value = 400 THEN 1 ELSE 0 END + CASE WHEN Value2 = 400 THEN 1 ELSE 0 END) AS FourHundred
FROM DemoTable;

उन्नत उपयोग: मानों का सशर्त योग (गिनती नहीं):

SELECT 
    SUM(IF(Value > 200, Value, 0)) AS Sum_Greater_200
FROM DemoTable;
  1. - MySQL में ORDER BY NULL का उपयोग और MySQL 8.0 में इसका व्यवहार

    MySQL में ORDER BY NULL का उपयोग और विभिन्न संस्करणों में इसका व्यवहार। नोट: MySQL 5.7 से पहले, ORDER BY NULL ग्रुपिंग/अन्य ऑपरेशन से अंतर्निहित क्रमबद्धता को दबाने के लिए उपयोगी था। MySQL 8.0+ में, अंतर्निहित क्रमबद्धता व्यवहार बदल गया है और ORDER BY NULL निर्दिष्ट करना अब आवश्यक नहीं है। उदाहरण:

  1. - MySQL में SUM() फंक्शन के परिणाम का WHERE क्लॉज में उपयोग: HAVING क्लॉज का उपयोग करें

    MySQL WHERE vs HAVING: एग्रीगेट फंक्शन के परिणाम पर फ़िल्टर WHERE क्लॉज पंक्तियों को समूहित करने पहले फ़िल्टर करता है, इसलिए इसमें एग्रीगेट फंक्शन (SUM, COUNT, AVG, आदि) उपयोग नहीं कर सकते। एग्रीगेट परिणाम पर फ़िल्टर के लिए HAVING क्लॉज का उपयोग करें। उदाहरण: कुल कीमत 40 से अधिक वाले नाम टेबल बनाएं

  1. - MySQL 8.0 में 'rank' आरक्षित शब्द: कॉलम नाम के लिए बैकटिक्स आवश्यक

    MySQL 8.0.2 से RANK एक आरक्षित शब्द (reserved word) है क्योंकि विंडो फ़ंक्शन RANK() जोड़ा गया। इसे कॉलम नाम के रूप में उपयोग करने के लिए बैकटिक्स (`) आवश्यक हैं। समस्या ); ERROR 1064 (42000): You have an error in your SQL syntax near rank int at line 5 समाधान: बैकटिक्स उपयोग करें ); Query OK डे