You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按食品类型统计订单详情总数?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:54:20