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

SQL技术求助:按用户积分总和取TOP10分组却出现重复条目

解决分组重复条目问题:获取积分总和TOP10分组的正确SQL

你的问题根源出在GROUP BY子句的错误使用上——你把users表的points字段加入了分组依据,这会导致同一个分组下的每个用户因为points值不同而被拆分成单独的分组,自然就出现了重复的分组条目。

修正后的SQL语句如下:

SELECT TOP 10 
    [groups].[name], 
    [groups].[id], 
    SUM(users.points) AS total_points
FROM [groups]
INNER JOIN [users] ON [groups].[id] = [users].[group_id]
GROUP BY [groups].[id], [groups].[name]
ORDER BY total_points DESC;

关键修正点说明:

  • 移除GROUP BY中的points:我们的分组逻辑是按groups表的唯一标识(id和name)来聚合用户积分,不需要把用户的points字段加入分组依据,这样同一个分组下的所有用户积分会被正确汇总成一条记录。
  • 优化别名(可选但推荐):把聚合结果的别名改成total_points,避免和users表的points字段混淆,让SQL逻辑更清晰。

如果需要统计**所有分组(包括没有用户的分组)**的积分总和(无用户的分组积分为0),可以改用LEFT JOIN并处理空值:

SELECT TOP 10 
    [groups].[name], 
    [groups].[id], 
    SUM(ISNULL(users.points, 0)) AS total_points
FROM [groups]
LEFT JOIN [users] ON [groups].[id] = [users].[group_id]
GROUP BY [groups].[id], [groups].[name]
ORDER BY total_points DESC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:18:59