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

能否使用子查询实现按团队统计前三名成员积分总和并排序

问题解决方案

核心结论

该需求完全可以通过子查询实现,以下分别提供子查询实现方案,以及更简洁的标准SQL窗口函数实现方案,兼容MySQL 8.0+、PostgreSQL、SQL Server等主流支持标准SQL的数据库,使用时请将代码中的your_table_name替换为你的实际表名。

方案1:纯子查询实现

SELECT 
    ROW_NUMBER() OVER (ORDER BY SUM(t1.Points) DESC) AS Place,
    t1.Team,
    SUM(t1.Points) AS Points
FROM 
    your_table_name t1
WHERE 
    (
        SELECT COUNT(*) 
        FROM your_table_name t2 
        WHERE t2.Team = t1.Team AND t2.Points > t1.Points
    ) < 3
GROUP BY 
    t1.Team
ORDER BY 
    Points DESC;

逻辑说明:子查询统计每个用户在所属团队中积分比自己高的人数,人数小于3即对应团队前3名,筛选后按团队分组求和,最后排序生成排名。

方案2:窗口函数实现(更简洁易维护)

WITH ranked_users AS (
    SELECT 
        Team,
        Points,
        ROW_NUMBER() OVER (PARTITION BY Team ORDER BY Points DESC) AS team_rank
    FROM your_table_name
)
SELECT 
    ROW_NUMBER() OVER (ORDER BY SUM(Points) DESC) AS Place,
    Team,
    SUM(Points) AS Points
FROM ranked_users
WHERE team_rank <= 3
GROUP BY Team
ORDER BY Points DESC;

逻辑说明:先通过ROW_NUMBER()窗口函数按团队分组给用户积分排名,筛选出每个团队排名前3的用户后,分组求和再排序生成排名。如果需要处理并列积分的场景,把ROW_NUMBER()替换为RANK()即可。

运行结果

两种方案执行后都会得到你预期的输出:

PlaceTeamPoints
1B85
2A78

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:48:04