子查询与多表关联实现各种族食物总食用量的SQL查询问题
三表关联统计种族维度食物总食用量实现方案
核心关联逻辑
三张表的关联可以顺着字段传递链路直接打通,不存在跨表断层:
- 从Food表出发,用公共字段
Animal_id连接Animal表,拿到每条食物记录对应的动物所属种族编码 - 再用Animal表带出的公共字段
Race_code连接Race表,拿到对应的种族名称 - 最后按种族维度分组,用
SUM(Quantity)计算每个种族的累计食物食用总量
可直接运行的查询语句
SELECT r.Race_name, SUM(f.Quantity) AS total_food_intake FROM Food f -- 关联动物表,拿到食物记录对应动物的种族编码 INNER JOIN Animal a ON f.Animal_id = a.Animal_id -- 关联种族表,拿到种族编码对应的正式名称 INNER JOIN Race r ON a.Race_code = r.Race_code -- 按种族分组,避免重名种族统计错位 GROUP BY r.Race_code, r.Race_name;
实现说明
- 语句默认使用内连接,会自动过滤掉没有匹配对应动物、或没有匹配种族信息的无效食物记录;如果需要保留全部食物数据、允许关联不到种族的情况存在,可将对应连接替换为
LEFT JOIN - 分组字段同时携带
Race_code而非仅按Race_name分组,是为了规避不同种族编码但种族名称重复时,聚合结果被错误合并的问题,统计准确性更高
内容的提问来源于stack exchange,提问作者Ghassen
相关产品推荐
相关产品推荐

