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

如何编写SQL查询按字典序配对球队并计算首队胜率?

解决球队配对场次与胜率的SQL方案

嘿,这问题我熟!要实现按字典序输出球队配对、场次和首队胜率,核心是先把所有主客队的配对统一成固定顺序(字典序小的在前),再统计计算。下面直接上可行的SQL和详细解释:

完整SQL代码

SELECT
    -- 按字典序确定配对的前后球队
    LEAST(home_team, away_team) AS team1,
    GREATEST(home_team, away_team) AS team2,
    -- 统计该配对的总比赛场次
    COUNT(*) AS total_matches,
    -- 计算team1的胜率:team1赢的场次/总场次,转成百分比格式
    CONCAT(ROUND(
        SUM(CASE
            WHEN (LEAST(home_team, away_team) = home_team AND home_score > away_score)
                OR (LEAST(home_team, away_team) = away_team AND away_score > home_score)
            THEN 1 ELSE 0
        END) * 100.0 / COUNT(*), 0
    ), '%') AS team1_win_rate
FROM football_tournaments
-- 按配对分组,确保同一组的比赛被聚合
GROUP BY LEAST(home_team, away_team), GREATEST(home_team, away_team)
-- 按字典序排序输出
ORDER BY team1, team2;

关键逻辑解释

  • 统一配对顺序:用LEAST()和GREATEST()函数,不管比赛里谁是主队客队,都把字典序更小的球队放在team1,更大的放在team2,这样Australia vs England和England vs Australia会被归为同一组。
  • 统计总场次:COUNT(*)直接统计该配对下的所有比赛数量。
  • 计算胜率:用CASE语句判断team1是否赢了这场比赛:如果team1是主队,就看主队进球是否大于客队;如果team1是客队,就看客队进球是否大于主队。把这些赢的场次加起来,除以总场次再乘以100,用ROUND()取整后拼接百分号。
  • 排序输出:最后按team1和team2的字典序排序,完全符合你要的输出顺序。

举个实际例子,假设数据库里Australia和England有3场比赛,其中Australia赢了1场,输出结果就会是Australia | England | 3 | 33%,和你给出的示例格式完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:33:33