SQL Server如何按GameID求和最大值?求纯SQL实现方案
实现需求的纯SQL方案
当然可以用纯SQL实现你想要的结果!我们可以通过两步分组聚合来完成这个逻辑:先按游戏ID分组取每个用户在该游戏下的最高得分,再对用户维度汇总游戏数量和最高得分的总和。
具体SQL代码(SQL Server适用)
WITH GameMaxScores AS ( SELECT GameID, UsrRegID, MAX(Score_User) AS Max_Score_User FROM YourTableName -- 替换成你的实际表名 GROUP BY GameID, UsrRegID ) SELECT COUNT(DISTINCT GameID) AS Distinct_Count_GameID, UsrRegID, SUM(Max_Score_User) AS Score_User FROM GameMaxScores GROUP BY UsrRegID;
逻辑解释
- CTE部分(GameMaxScores):先按
GameID和UsrRegID分组,计算每个用户在每款游戏中的最高得分Max_Score_User。这一步就得到了每个游戏对应的用户最高分数,比如GameID=281的最大值是3,GameID=282是1,GameID=283是3。 - 外层查询:对
UsrRegID分组,用COUNT(DISTINCT GameID)统计用户参与的不同游戏数量,用SUM(Max_Score_User)把每个游戏的最高得分加总,正好得到你要的7(3+1+3)。
如果你的数据量不大,也可以用子查询替代CTE,效果完全一致:
SELECT COUNT(DISTINCT GameID) AS Distinct_Count_GameID, UsrRegID, SUM(Max_Score_User) AS Score_User FROM ( SELECT GameID, UsrRegID, MAX(Score_User) AS Max_Score_User FROM YourTableName GROUP BY GameID, UsrRegID ) AS SubQuery GROUP BY UsrRegID;
内容的提问来源于stack exchange,提问作者Ye.s
相关产品推荐
相关产品推荐

