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

MySQL में सबक्वेरी से क्यूमुलेटिव सम 150 से कम वाले मान चुनना

सबक्वेरी के साथ क्यूमुलेटिव सम फ़िल्टरिंग

कॉलम मानों का क्यूमुलेटिव सम (रनिंग टोटल) एक सीमा से कम होने वाली पंक्तियों को चुनने के लिए सहसंबद्ध सबक्वेरी का उपयोग करें।

उदाहरण: टेबल बनाना और डेटा इन्सर्ट करना

mysql> CREATE TABLE DemoTable844(
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Amount INT
);
Query OK, 0 rows affected (0.95 sec)

रिकॉर्ड्स इन्सर्ट करना

mysql> INSERT INTO DemoTable844(Amount) VALUES(80),(100),(60),(40),(150),(24);
Query OK, 6 rows affected (...)

सभी रिकॉर्ड्स देखना

mysql> SELECT * FROM DemoTable844;
+----+--------+
| Id | Amount |
+----+--------+
| 1  | 80     |
| 2  | 100    |
| 3  | 60     |
| 4  | 40     |
| 5  | 150    |
| 6  | 24     |
+----+--------+
6 rows in set (0.00 sec)

क्यूमुलेटिव सम < 150 वाली पंक्तियों की क्वेरी

mysql> SELECT * FROM DemoTable844 tbl
    WHERE (SELECT SUM(Amount) FROM DemoTable844 WHERE Amount <= tbl.Amount ORDER BY Amount) < 150
    ORDER BY Id;

परिणाम

+----+--------+
| Id | Amount |
+----+--------+
| 3  | 60     |
| 4  | 40     |
| 6  | 24     |
+----+--------+
3 rows in set (0.26 sec)

क्वेरी व्याख्या

  • बाहरी क्वेरी: tbl एलियास के साथ प्रत्येक रो के लिए
  • सबक्वेरी: WHERE Amount <= tbl.Amount - वर्तमान रो के मान से कम या बराबर सभी मानों का योग
  • ORDER BY Amount - क्यूमुलेटिव सम के लिए क्रम सुनिश्चित करता है
  • < 150 - केवल वे रो जहां क्यूमुलेटिव सम 150 से कम है

तर्क समझना

Amount के आरोही क्रम में: 24, 40, 60, 80, 100, 150

  • 24: सम = 24 (< 150) ✓
  • 40: सम = 24+40 = 64 (< 150) ✓
  • 60: सम = 64+60 = 124 (< 150) ✓
  • 80: सम = 124+80 = 204 (≥ 150) ✗
  • 100: सम = 204+100 = 304 (≥ 150) ✗
  • 150: सम = 304+150 = 454 (≥ 150) ✗

परिणाम: 24, 40, 60 वाली पंक्तियां (Id: 6, 4, 3)

बेहतर तरीका: विंडो फंक्शन (MySQL 8.0+)

SELECT Id, Amount FROM (
    SELECT Id, Amount,
           SUM(Amount) OVER (ORDER BY Amount ROWS UNBOUNDED PRECEDING) AS CumulativeSum
    FROM DemoTable844
) t WHERE CumulativeSum < 150
ORDER BY Id;

लाभ विंडो फंक्शन के

  • अधिक पठनीय और रखरखाव योग्य
  • बेहतर प्रदर्शन (सिंगल पास)
  • मानक SQL अनुपालन
  • पार्टीशनिंग सपोर्ट

उपयोग के मामले

  • बजट सीमा के भीतर आइटम चुनना
  • क्यूमुलेटिव कोटा/सीमा लागू करना
  • समय-आधारित संचय सीमाएं
  1. - MySQL में विशिष्ट मानों की घटनाओं को गिनें और नए कॉलम में परिणाम प्रदर्शित करें

    COUNT(*) के साथ GROUP BY का उपयोग करके प्रत्येक विशिष्ट मान की घटनाओं को गिनें। टेबल बनाना और डेटा डालना CREATE TABLE DemoTable (Value INT); Query OK, 0 rows affected (0.57 sec) INSERT INTO DemoTable VALUES(80),(90),(90),(80),(100),(90); सभी रिकॉर्ड देखना SELECT * FROM DemoTable; आउटपुट: +----

  1. - MySQL में CHAR_LENGTH() और SUM() का उपयोग करके विशिष्ट कॉलम मानों का आकार प्राप्त करना और योग प्रदर्शित करना

    MySQL में स्ट्रिंग लंबाई का योग स्ट्रिंग कॉलम की लंबाई की गणना करने और शर्तों के आधार पर योग करने के लिए, CHAR_LENGTH() (वर्ण गिनती) या LENGTH() (बाइट गिनती) के साथ SUM() का उपयोग करें। उदाहरण: चयनित पंक्तियों के लिए प्रथम नाम लंबाई का योग SELECT * FROM DemoTable1612; +-----------+----------+ | Fi

  1. - MySQL में CASE स्टेटमेंट का उपयोग करके Amount कॉलम से एक ही कीमत के दो अलग-अलग योग कैसे प्रदर्शित करें?

    इसके लिए आप CASE स्टेटमेंट का उपयोग कर सकते हैं। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1794 ( Amount int ); Query OK, 0 rows affected (0.00 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable1794 values(100); Query OK, 1 row affecte