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

如何查询同球员同年份order重复的异常记录?SQL求助

筛选同球员同年份下order重复的异常记录SQL语句

问题背景

现有一张包含player、team、year、order字段的表,规则为:同一球员在同一年份可隶属于多支球队,但同一球员+同一年份下的order值必须唯一。表中player=4、year=2020的两条记录order均为0,属于违反规则的异常数据,需要筛选出所有此类异常记录。

解决方案

以下两种SQL语句均可实现需求:

方法1:分组筛选重复组合后关联原表

先通过分组找出存在重复的(player, year, order)组合,再关联原表获取完整的异常记录:

SELECT t.*
FROM your_table t
JOIN (
    SELECT player, year, `order`
    FROM your_table
    GROUP BY player, year, `order`
    HAVING COUNT(*) > 1
) dup 
ON t.player = dup.player 
AND t.year = dup.year 
AND t.`order` = dup.`order`
ORDER BY t.player, t.year, t.`order`;

方法2:窗口函数标记重复记录

使用窗口函数COUNT()直接对player、year、order分组统计数量,过滤出数量大于1的记录:

SELECT player, team, year, `order`
FROM (
    SELECT 
        *,
        COUNT(*) OVER (PARTITION BY player, year, `order`) AS duplicate_count
    FROM your_table
) t
WHERE duplicate_count > 1
ORDER BY player, year, `order`;

注意事项

  • order是SQL保留关键字,因此需要用反引号(MySQL)或方括号(SQL Server)包裹,避免语法错误。
  • 两种方法均能返回所有符合异常条件的记录,小数据量下两种方式效率相近,大数据量下分组关联的方式可能更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:25:22