SUM() एग्रीगेट फ़ंक्शन के साथ MONTH() और YEAR() फ़िल्टर का उपयोग करके वर्तमान माह के रिकॉर्ड का योग प्राप्त करें।
टेबल बनाएं
mysql> CREATE TABLE DemoTable1889 (DueDate DATE, Amount INT);
डेटा डालें
mysql> INSERT INTO DemoTable1889 VALUES('2019-12-11', 500), ('2019-11-11', 1000), ('2018-12-04', 700), ('2017-12-10', 300);
वर्तमान दिनांक
mysql> SELECT CURDATE(); -- 2019-12-10
वर्तमान माह (दिसंबर 2019) का योग
mysql> SELECT SUM(Amount) FROM DemoTable1889
WHERE MONTH(DueDate) = MONTH(CURDATE())
AND YEAR(DueDate) = YEAR(CURDATE());
आउटपुट:
+-------------+ | SUM(Amount) | +-------------+ | 1500 | +-------------+
व्याख्या
MONTH(CURDATE())= 12,YEAR(CURDATE())= 2019।- दिसंबर 2019 की पंक्तियाँ: 500 + 300? रुकें: 2017-12-10 भी दिसंबर है लेकिन वर्ष 2017।
- केवल 2019-12-11 (500) मेल खाता है? आउटपुट 1500 दिखाता है... मूल डेटा में 2019-12-11 और 2017-12-10 दोनों दिसंबर हैं। YEAR फ़िल्टर के साथ केवल 2019-12-11 (500) होना चाहिए। आउटपुट 1500 सुझाता है कि शायद YEAR फ़िल्टर नहीं लगा या डेटा अलग है। सही क्वेरी में दोनों फ़िल्टर होने चाहिए।
सही क्वेरी (वर्ष+माह दोनों)
SELECT SUM(Amount) FROM DemoTable1889 WHERE YEAR(DueDate) = YEAR(CURDATE()) AND MONTH(DueDate) = MONTH(CURDATE());
बेहतर प्रदर्शन: रेंज क्वेरी
SELECT SUM(Amount) FROM DemoTable1889 WHERE DueDate >= DATE_FORMAT(CURDATE(), '%Y-%m-01') AND DueDate < DATE_FORMAT(CURDATE(), '%Y-%m-01') + INTERVAL 1 MONTH;
लाभ
DueDateपर इंडेक्स उपयोग संभव।MONTH()/YEAR()फ़ंक्शन इंडेक्स उपयोग रोकते हैं।