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

SQL查询:如何展示参与多次的参与者的所有分数记录

解决方法:查询参与多次的参与者全部分数记录

嗨,这个问题我之前也踩过坑!分组后要保留原记录确实容易卡壳,其实有几种简单的思路能搞定,结合你的示例数据给你演示下:

方法一:子查询筛选符合条件的姓名后关联原表

先通过子查询找出所有参与次数超过1次的参与者姓名,再用这个名单去原表中捞对应所有记录:

SELECT Name, Score
FROM YourScoreTable
WHERE Name IN (
    SELECT Name
    FROM YourScoreTable
    GROUP BY Name
    HAVING COUNT(Score) > 1
)

这个逻辑很直观:内层分组查询先筛选出Tom和Dick(因为他们的记录数都>1),外层查询直接把原表中这两个人的所有分数记录都取出来,正好就是你要的结果——排除Harry那条仅有的记录。

方法二:用窗口函数一步到位(适合支持窗口函数的数据库)

如果你的数据库支持窗口函数(比如SQL Server、MySQL 8.0+、PostgreSQL、Oracle等),可以用更简洁的写法:

SELECT Name, Score
FROM (
    SELECT 
        Name, 
        Score,
        -- 给每条记录标记该姓名对应的总参与次数
        COUNT(*) OVER (PARTITION BY Name) AS TotalParticipations
    FROM YourScoreTable
) AS ScoreWithCount
WHERE TotalParticipations > 1

窗口函数COUNT(*) OVER (PARTITION BY Name)会在不改变原表行数的前提下,给每条记录计算出对应姓名的总记录数,之后在外层筛选总次数>1的记录即可,不需要单独写分组查询,逻辑更连贯。

补充说明

  • 如果是旧版本的MySQL(不支持窗口函数),方法一的子查询写法兼容性最好,几乎所有数据库都支持;
  • 两种方法的结果是完全一致的,你可以根据自己使用的数据库版本和习惯来选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:11:24