MySQL选择总交易的总和

时间:2018-01-03 16:40:48

标签: mysql transactions

我有两个表事务和detailtransaction,关系是1到N. ,这里的交易表

    +-----+----------+--------+---------------------+------------+-------------+---------+---
    | ID  | TransactionDate     | GrandTotal | DownPayment | Status   | DatePaid            |
    +-----+----------+--------+---------------------+------------+-------------+---------+---
    | 173 | 2018-01-03 22:05:00 |   26000.00 |    26000.00 | PAID OFF | 2018-01-03 21:05:52 |
    | 174 | 2018-01-01 22:06:00 |   26000.00 |        0.00 | PAID OFF | 2018-01-03 22:05:52 |
    | 175 | 2018-01-02 22:06:00 |   60000.00 |    10000.00 | - 50000  | 2018-01-03 21:06:55 |
    | 176 | 2018-01-03 22:08:00 |   90000.00 |    50000.00 | - 40000  | 2018-01-03 21:08:19 |
    | 178 | 2018-01-03 22:34:00 |   70000.00 |    70000.00 | PAID OFF | 2018-01-03 21:35:00 |
    | 179 | 2018-01-03 23:13:00 |   52000.00 |    52000.00 | PAID OFF | 2018-01-03 22:13:35 |
    +-----+----------+--------+---------------------+------------+-------------+---------+---

和这里的transactiondetail表

    +----+---------------+-----------+---------------+--------+------+----------+----------+------------+
    | ID | TransactionID | ProductID | ServiceID     | UserID | Tax  | Discount | Quantity | PriceTotal |
    +----+---------------+-----------+---------------+--------+------+----------+----------+------------+
    |  1 |           173 |      NULL | SV031         |      7 | NULL |        0 |        0 |   26000.00 |
    |  2 |           174 |      NULL | SV032         |      7 | NULL |        0 |        0 |   26000.00 |
    |  3 |           175 |      NULL | SV033         |      7 | NULL |        0 |        0 |   60000.00 |
    |  4 |           176 |         8 | NULL          |      7 | NULL |        0 |        1 |   30000.00 |
    |  5 |           176 |      NULL | SV034         |      7 | NULL |        0 |        0 |   60000.00 |
    |  7 |           178 |         5 | NULL          |      7 | NULL |        0 |        1 |   70000.00 |
    |  8 |           179 |      NULL | SV036         |      7 | NULL |        0 |        0 |   26000.00 |
    |  9 |           179 |      NULL | SV037         |      7 | NULL |        0 |        0 |   26000.00 |
    +----+---------------+-----------+---------------+--------+------+----------+----------+------------+

在1笔交易,购买产品或服务中可以做2件事。因此,在TransactionDetail上有ServiceID和ProductID。

 on ID 173, someone made transaction of service and paid off
 ID 174, someone made transaction 3 days ago and paid it today
 ID 175 transaction of service and put Downpayment of 10k
 ID 176 transaction of 1 product cost 30k and service cost 60k, downpayment is 50k (minus 40k)
 ID 178 buying some product cost 70k
 ID 179 2 service and paid off the transaction

规则是产品不能稍后支付,只有服务可以

我想做一份日常收入的报告,如何求和是基于DatePaid,我得到的结果是26k + 26k + 10k + 50k + 70K + 52k = 230K

我试图通过加入表来获得SUM,我得到的是重复该值,就像1次交易中的2次服务一样,它总结为2次交易。这是我尝试过的,我得到了336k

SELECT SUM(CASE WHEN Status = 'PAID OFF' THEN GrandTotal ELSE DownPayment END) FROM `transaction` a LEFT JOIN transactiondetail b ON a.ID = b.TransactionID WHERE DatePaid BETWEEN '2018-01-03 00:00:00' AND '2018-01-03 23:59:59'

另外,我如何仅将transactiondetail与serviceID相加,以使产品不是总和。 感谢

2 个答案:

答案 0 :(得分:0)

获得总和:

SELECT SUM(CASE WHEN Status = 'PAID OFF' THEN GrandTotal ELSE DownPayment END) FROM `transaction`  WHERE DatePaid BETWEEN '2018-01-03 00:00:00' AND '2018-01-03 23:59:59'

删除产品可以通过检查product_id是否为空来完成,并将总使用子查询作为:

SELECT SUM(total) FROM( SELECT SUM(CASE WHEN Status = 'PAID OFF' THEN GrandTotal ELSE DownPayment END) AS total FROM `transaction` a LEFT JOIN transactiondetail b ON a.ID = b.TransactionID WHERE DatePaid BETWEEN '2018-01-03 00:00:00' AND '2018-01-03 23:59:59'  AND ProductID IS NULL GROUP BY a.ID ) as t

答案 1 :(得分:0)

首先,如果您只需要金额总和,则无需加入交易详情。只需以下查询即可。

SELECT SUM(当状态='已关闭',那么GrandTotal ELSE DownPayment END)从transaction WHERE DatePaid BETWEEN'2018-01-03 00:00:00'和'2018-01-03 23: 59:59'

其次,您需要从交易明细表中获得哪些详细信息,是否希望按产品和服务分组查看金额。