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

使用两个CTE时无法执行GROUP BY的技术问题求助

解决SQL按俱乐部分组统计数据的问题

你原来的SQL存在两个核心问题:一是重复创建CTE做冗余关联,二是用笛卡尔积连接表导致数据混乱,且未对需要统计的字段做聚合操作,所以分组时报错。

直接修改成以下SQL即可实现按俱乐部分组统计的需求:

SELECT 
    club.club_name,
    SUM(club_results.goals_scored) AS total_goals_scored,
    SUM(club_results.goals_conceded) AS total_goals_conceded,
    SUM(club_results.goals_scored - club_results.goals_conceded) AS total_goal_difference,
    SUM(
        CASE
            WHEN (club_results.goals_scored - club_results.goals_conceded) > 0 THEN 3
            WHEN (club_results.goals_scored - club_results.goals_conceded) < 0 THEN 0
            ELSE 1
        END
    ) AS total_points
FROM club_results
INNER JOIN club ON club_results.club_id = club.club_id
GROUP BY club.club_id, club.club_name;

关键修改说明:

  • 去掉冗余的CTE,直接关联club_results和club两张表,避免不必要的子查询/CTE
  • 对每场比赛的进球、失球用SUM()做聚合,得到俱乐部的总进球数和总失球数
  • 净胜球通过累加每场的进球差值得到,也可以写成SUM(club_results.goals_scored) - SUM(club_results.goals_conceded),结果一致
  • 积分需要先计算单场比赛的积分(胜3分、平1分、负0分),再用SUM()累加得到俱乐部的总积分
  • GROUP BY中同时包含club_id和club_name,避免出现不同俱乐部重名导致的统计错误,同时符合SQL的分组规则(非聚合字段必须出现在GROUP BY中)

内容的提问来源于stack exchange,提问作者muhammedhyder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:50:24