ใช้ MONTH() และ YEAR() กรองวันที่ แล้ว SUM() รวมยอด
mysql> CREATE TABLE DemoTable1562 (
-> VoucherValue INT,
-> RechargeDate DATE
-> );
Query OK, 0 rows affected (1.40 sec)
mysql> INSERT INTO DemoTable1562 VALUES(149, '2019-10-21'); Query OK, 1 row affected (0.11 sec) mysql> INSERT INTO DemoTable1562 VALUES(199, '2019-10-13'); Query OK, 1 row affected (0.18 sec) mysql> INSERT INTO DemoTable1562 VALUES(399, '2018-10-13'); Query OK, 1 row affected (0.25 sec) mysql> INSERT INTO DemoTable1562 VALUES(450, '2019-10-13'); Query OK, 1 row affected (0.20 sec)
mysql> SELECT * FROM DemoTable1562;
+--------------+--------------+ | VoucherValue | RechargeDate | +--------------+--------------+ | 149 | 2019-10-21 | | 199 | 2019-10-13 | | 399 | 2018-10-13 | | 450 | 2019-10-13 | +--------------+--------------+ 4 rows in set (0.00 sec)
mysql> SELECT CURDATE();
+------------+ | CURDATE() | +------------+ | 2019-10-13 | +------------+ 1 row in set (0.00 sec)
รวมยอดเฉพาะเดือนและปีปัจจุบัน:
mysql> SELECT SUM(VoucherValue) FROM DemoTable1562
-> WHERE MONTH(RechargeDate) = MONTH(CURDATE())
-> AND YEAR(RechargeDate) = YEAR(CURDATE());
+-------------------+ | SUM(VoucherValue) | +-------------------+ | 798 | +-------------------+ 1 row in set (0.00 sec)
ประสิทธิภาพ: การใช้ Function บนคอลัมน์ (MONTH, YEAR) ทำให้ไม่ใช้ดัชนีได้ ควรพิจารณา WHERE RechargeDate >= '2019-10-01' AND RechargeDate < '2019-11-01' แทน