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

MySQL统计两支球队对阵唯一组合的不重复比赛总场次

问题原因

你当前的自连接写法会生成对称重复行:主表取「A为主场、B为客场」的记录时,会匹配副表「B为主场、A为客场」的记录生成第一行结果;主表取「B为主场、A为客场」的记录时,又会匹配副表「A为主场、B为客场」的记录生成第二行结果,最终同一组对阵会返回两条重复记录。

解决方案

不需要多层子查询和自连接,直接对主客队做无序归组后聚合计数即可,写法简洁、执行效率更高,返回结果完全符合你的预期:

全数据库兼容写法

SELECT
    CASE WHEN home_team < away_team THEN home_team ELSE away_team END AS `home team`,
    CASE WHEN home_team < away_team THEN away_team ELSE home_team END AS `away team`,
    COUNT(*) AS matches
FROM results
GROUP BY 1, 2;

简化写法(MySQL、PostgreSQL等支持LEAST/GREATEST函数的数据库可用)

SELECT
    LEAST(home_team, away_team) AS `home team`,
    GREATEST(home_team, away_team) AS `away team`,
    COUNT(*) AS matches
FROM results
GROUP BY 1, 2;
逻辑说明

无论两队主客场身份如何,都按固定规则排序:把名称字典序靠前的球队放在第一列、靠后的放在第二列,从根源上避免同一对阵组合因为主客场交换生成不同的分组键。直接按排序后的两个队伍字段分组计数,统计的就是两队所有主客场安排下的总交手场次,每组对阵仅返回一条记录,和你给出的示例输出完全一致。

如果一定要基于原有写法修改去重,只需要在查询最外层加过滤条件WHERE home.home_team < home.away_team即可,但这种写法冗余度高、执行性能差,不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:06:20