MySQL如何筛选仅含单一热门选手的赛事获胜记录?
实现单一热门选手夺冠记录的筛选
可以实现,核心思路是先统计每场赛事中ranking=1的选手数量,再筛选出仅1名热门选手且该选手夺冠的记录。以下是两种可行的SQL写法:
方法1:子查询分组统计
适合不支持窗口函数的数据库:
SELECT r.* FROM results r WHERE r.position = 1 AND r.ranking = 1 AND r.no_of_runners = 6 AND ( -- 统计当前记录所属赛事中ranking=1的选手数量 SELECT COUNT(*) FROM results r2 -- 需用赛事唯一标识关联,比如event_id(若表中无此字段,需先添加) WHERE r2.event_id = r.event_id AND r2.ranking = 1 ) = 1;
方法2:窗口函数统计(更高效)
支持窗口函数的数据库(如MySQL 8+、PostgreSQL、SQL Server等)推荐使用:
SELECT position, ranking, odds, no_of_runners FROM ( SELECT *, -- 按赛事分组,统计该赛事中ranking=1的选手数量 COUNT(CASE WHEN ranking = 1 THEN 1 END) OVER (PARTITION BY event_id) AS num_favourites FROM results ) AS sub_query WHERE position = 1 AND ranking = 1 AND no_of_runners = 6 AND num_favourites = 1;
关键说明
如果你的数据表中没有赛事唯一标识字段(如event_id),需要先添加该字段,否则无法准确区分不同赛事的记录(不同赛事可能有相同的参赛人数)。添加后使用上述语句即可精准筛选出符合要求的记录。
内容的提问来源于stack exchange,提问作者user1557515
相关产品推荐
相关产品推荐

