MySQL多表条件查询需求:统计订单总数与销售总额
MySQL查询:统计订单总数与对应销售总额
需求说明
编写单条MySQL查询语句,完成两个统计目标:
- 获取订单总数,别名为
Number_Of_Order - 计算所有订单的销售总额,别名为
Total_Sales_Amount,核心规则是根据订单的Sales_type匹配对应价格:Sales_type为Normal时,使用Normal_Price计算Sales_type为Promo时,使用Promotion_Price计算
涉及数据表
Orders表
| Order_ID | Sales_type |
|---|---|
| 10 | Normal |
| 12 | Promo |
| 13 | Normal |
| 14 | Promo |
| 15 | Normal |
| 16 | Promo |
Orders_Products表
| Order_Product_ID | Order_ID | Normal_Price | Promotion_Price |
|---|---|---|---|
| 100 | 10 | 50 | 25 |
| 101 | 12 | 100 | 80 |
| 102 | 12 | 60 | 50 |
| 103 | 13 | 40 | 20 |
| 104 | 14 | 50 | 25 |
| 105 | 15 | 40 | 30 |
| 106 | 15 | 300 | 250 |
| 107 | 16 | 150 | 100 |
| 108 | 16 | 75 | 60 |
解决方案SQL语句
SELECT COUNT(DISTINCT o.Order_ID) AS Number_Of_Order, SUM( CASE WHEN o.Sales_type = 'Normal' THEN op.Normal_Price WHEN o.Sales_type = 'Promo' THEN op.Promotion_Price ELSE 0 END ) AS Total_Sales_Amount FROM Orders o JOIN Orders_Products op ON o.Order_ID = op.Order_ID;
逻辑说明
- 表关联:通过
Order_ID关联Orders与Orders_Products,确保每个订单项匹配对应订单的销售类型 - 订单总数统计:用
COUNT(DISTINCT o.Order_ID)避免重复统计同一订单(单个订单可能对应多个订单项) - 总额计算:通过
CASE条件分支,根据销售类型选择对应价格字段求和,保证价格计算规则准确
预期查询结果
| Number_Of_Order | Total_Sales_Amount |
|---|---|
| 6 | 805 |
(计算明细:Normal订单总额=50+40+40+300=430;Promo订单总额=80+50+25+100+60=315;总计430+315=805)
内容的提问来源于stack exchange,提问作者Unknown Kid
相关产品推荐
相关产品推荐

