如何按食品类型统计订单详情总数?MySQL查询问题求助
问题分析与解决方案
原查询的核心问题是:同时使用关联查询和子查询统计订单数,且GROUP BY f.type时,子查询仅返回单个食品的订单数,未对同一类型下的所有食品订单数进行求和。例如Breakfast类型包含F01(1条订单)和F02(1条订单),但GROUP BY后仅取了其中一个食品的订单数,导致结果错误。
正确查询语句
方法一:直接关联统计
通过关联foods和order_detail表,直接按食品类型统计关联到的订单详情记录数:
SELECT f.type, COUNT(od.food_id) AS total_order FROM foods f LEFT JOIN order_detail od ON f.id = od.food_id GROUP BY f.type ORDER BY f.type;
方法二:子查询分组后求和
先统计每个食品的订单数,再关联食品表按类型累加求和(适合更复杂的统计场景):
SELECT f.type, COALESCE(SUM(od.order_count), 0) AS total_order FROM foods f LEFT JOIN ( SELECT food_id, COUNT(*) AS order_count FROM order_detail GROUP BY food_id ) od ON f.id = od.food_id GROUP BY f.type ORDER BY f.type;
结果验证
两种查询语句均可得到期望结果:
type | total_order ------------------------- Breakfast | 2 Lunch | 2 Dinner | 1
内容的提问来源于stack exchange,提问作者Dani Fadli
相关产品推荐
相关产品推荐

