【发布时间】:2021-11-12 21:08:15
【问题描述】:
我有一些销售数据如下:
SELECT bv.sale_time
, amount_due
, round(sum(amount_paid), 2) as paid
, m.payment_method_id
, m.method
, bt.payment_status
FROM basket_amount_due bv
JOIN basket bt USING(basket_id)
LEFT JOIN basket_payment p USING (basket_id)
JOIN payment_method m USING(payment_method_id)
GROUP BY bv.basket_id;
+---------------------+------------+---------+-------------------+-------------------+----------------+
| sale_time | amount_due | paid | payment_method_id | method | payment_status |
+---------------------+------------+---------+-------------------+-------------------+----------------+
| 2021-09-18 12:19:04 | 1170.00 | 1170.00 | 1 | CASH | paid |
| 2021-09-18 12:19:39 | 756.60 | 0.00 | 1 | CASH | due |
| 2021-09-18 12:20:22 | 1115.50 | 1000.00 | 1 | CASH | partial |
| 2021-09-18 12:21:47 | 990.00 | 990.00 | 4 | Cash on Delivery | paid |
| 2021-09-18 12:23:33 | 698.40 | 0.00 | 4 | Cash on Delivery | due |
| 2021-09-18 12:29:45 | 2070.00 | 2070.00 | 2 | Credit/Debit Card | paid |
+---------------------+------------+---------+-------------------+-------------------+----------------+
6 rows in set (0.004 sec)
我的问题是,现在我需要按付款方式和付款状态获取总销售额。这意味着我想要,
- 现金销售总额(= 现金(已支付)+ 现金(部分支付)+ 货到付款 (付费))
- 赊销总额(= 现金(到期)+ 现金(部分到期)+ 货到付款 (到期))
- 货到付款销售总额(= 货到付款(已支付)+ 现金 交货时(到期))
- 信用卡总销售额(信用卡(付费))
使用上述查询的输出,我期望的数字输出如下:
- 现金销售总额 = (1170.00 + 1000.00 + 990.00)
- 总信用销售 = (756.60 + (1115.50 - 1000.00) + 698.40)
- 货到付款销售总额 = (990.00 + 698.40)
- 卡片总销售额 = (2070.00)
注意:如等式所示(支付方式(支付状态))。 Ex: (cash (paid))
这是我到目前为止的查询。希望有人可以帮助我解决这个问题。
SELECT DATE(bv.sale_time)
, CASE
WHEN p.payment_method_id IN (1, 2)
THEN sum(amount_due)
ELSE 0
END AS total_cash_sales
, CASE p.payment_method_id
WHEN 4 THEN sum(amount_due) ELSE 0 END AS total_credit_sales
FROM basket_amount_due bv
JOIN basket bt USING(basket_id)
LEFT JOIN basket_payment p USING (basket_id)
JOIN payment_method m USING(payment_method_id)
WHERE DATE(bv.sale_time) = CURDATE()
GROUP BY p.payment_method_id;
【问题讨论】:
-
您是否考虑过在查询中使用 5 个子选择?
-
` 1 AND 2` 始终为真。
DATE不需要包装sale_time。编写一个case表达式,计算出 4 个类别中每个类别的唯一编号,然后编写group by表达式标识符。 -
@danblack 我可以看一个例子吗?