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

MySQL技术问题:如何筛选观看过全部足球赛事的球迷(含重复购票)

找出观看过所有足球赛事的球迷解决方案

嘿,我来帮你搞定这个查询需求!咱们先理清楚核心问题:要筛选出看过所有赛事的球迷,还要注意同一个球迷可能为同一场比赛买多张票,统计的时候得去重,不能重复计数。

思路拆解

  • 先算清楚数据库里总共有多少场不同的赛事(从match表提取数据)
  • 对每个球迷,统计他们实际看过的不同赛事数量(从booking表去重后统计,避免同一场票买多次算多场)
  • 把每个球迷的观赛场数和总场数对比,相等的就是我们要找的目标球迷
  • 最后关联fan表,把球迷的姓名信息一并拉出来

MySQL 查询代码

SELECT f.IDfan, f.name, f.surname
FROM fan f
JOIN (
    -- 统计每个球迷去重后的观赛场数
    SELECT IDfan, COUNT(DISTINCT IDmatch) AS watched_matches
    FROM booking
    GROUP BY IDfan
) b ON f.IDfan = b.IDfan
-- 筛选出观赛场数等于总赛事数的球迷
WHERE b.watched_matches = (SELECT COUNT(*) FROM match);

代码解释

  • (SELECT COUNT(*) FROM match):这个子查询用来获取所有赛事的总数量,示例数据里是3场。
  • 内层子查询用COUNT(DISTINCT IDmatch),就是为了避免同一个球迷买同一场的多张票导致统计场数虚高,确保只计算实际看过的不同赛事。
  • 最后通过JOIN关联球迷表和统计结果,筛选出符合条件的记录即可。

测试结果

用你提供的示例数据运行这个查询,会得到预期的结果:

IDfannamesurname
1AA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:34:27