MySQL使用GROUP BY与JOIN按菜品类型统计酒吧采购总额求助
按菜品类型统计采购总额SQL实现
实现逻辑
- 采用条件聚合统计不同类型菜品的采购额,通过
CASE WHEN判断drink_food表中的菜品类型,分别累加对应采购金额 - 修正分组字段与关联逻辑,保证统计结果准确符合预期
可用查询代码
SELECT b.name AS branch_name, SUM(CASE WHEN df.type = 'food' THEN IFNULL(ph.total, 0) ELSE 0 END) AS food_total, SUM(CASE WHEN df.type = 'drink' THEN IFNULL(ph.total, 0) ELSE 0 END) AS drink_total, SUM(IFNULL(ph.total, 0)) AS total, SUM(IFNULL(ph.gratuity, 0)) AS gratuity FROM branches b LEFT JOIN drink_requests dr ON b.id = dr.branch_id LEFT JOIN drink_food df ON df.id = dr.drink_id LEFT JOIN bar_purchase_history ph ON ph.request_id = dr.id GROUP BY b.id, b.name;
优化说明
- 加入
IFNULL判断处理空值,避免无采购记录时统计结果返回NULL - 将原SQL的内连接改为左连接,保证所有门店都会出现在结果中,即使对应没有采购记录也会显示金额为0
- 分组字段修改为门店表的主键id和门店名称,兼容严格SQL模式的语法要求,不会出现分组非法报错
内容的提问来源于stack exchange,提问作者sandip bharadva
相关产品推荐
相关产品推荐

