如何对每个日期范围内的列求和。
我需要对价格列和折扣列求和,然后根据日期行得出它们。
在本例中,我选择了 39 的 order_id,请参见下表。
这是我的订单表:
id order_id price price_disc date_transaction
1 39 537 25 2014-03-28 11:44:40
2 39 323 0 2014-03-28 16:12:42
3 38 309 11 2014-03-29 15:47:48
4 39 223 16 2014-03-29 19:22:28
5 37 304 19 2014-03-30 23:31:34
6 38 109 7 2014-03-31 09:12:16
7 38 223 0 2014-03-31 17:00:35
8 38 116 9 2014-04-01 20:32:27
9 38 296 0 2014-04-02 16:45:00
10 39 482 20 2014-04-03 12:42:03
11 39 371 12 2014-04-03 20:02:10
12 36 293 13 2014-04-03 21:09:45
13 39 299 0 2014-04-03 23:28:10
14 39 403 22 2014-04-04 08:06:13
我想要这样的结果:
date_transaction total_price total_price_disc
2014-03-28 860 25
2014-03-29 223 16
2014-03-30 0 0
2014-03-31 0 0
2014-03-01 0 0
2014-03-02 0 0
2014-03-03 1152 32
2014-03-04 403 22
2014-03-05 0 0
2014-03-06 0 0
这是我尝试过的方法,但只获取 date_transaction 和 total_price 的结果。
SELECT
DISTINCT DATE_FORMAT(date_transaction, '%Y-%m-%d') AS date_transaction,
COALESCE(SUM(price), 0) AS total_price
FROM orders
WHERE order_id = 39
AND date_transaction BETWEEN '2014-03-28' AND '2014-04-06' + INTERVAL 1 DAY
GROUP BY DATE_FORMAT(date_transaction, '%Y-%m-%d')
ORDER BY date_transaction ASC;
最佳答案
使用 DATE()
函数获取日期。
SELECT
DISTINCT DATE(date_transaction) AS date_transaction,
SUM(price) AS total_price,
SUM(price_disc) AS total_price_disc
FROM orders
WHERE order_id = 39
AND DATE(date_transaction) BETWEEN '2014-03-28' AND '2014-04-06' + INTERVAL 1 DAY
GROUP BY DATE(date_transaction)
ORDER BY DATE(date_transaction) ASC;
关于日期范围内的 MySQL SUM 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37134656/