不支持LIMIT语法的数据库如何查询拥有最多成就记录的UserID
解决方案
通用标准SQL写法(兼容所有不支持LIMIT的数据库)
核心思路是先统计每个用户的成就总数,再匹配最大值对应的用户,同时支持返回并列第一的所有用户:
SELECT UserID FROM ( -- 统计每个用户的成就数量 SELECT UserID, COUNT(Achievement) AS achievement_count FROM Players GROUP BY UserID ) AS user_achievement_stats WHERE achievement_count = ( -- 取所有用户中最高的成就数量 SELECT MAX(achievement_count) FROM ( SELECT COUNT(Achievement) AS achievement_count FROM Players GROUP BY UserID ) AS count_stats )
支持窗口函数的数据库简化写法
如果你的数据库支持窗口函数(MySQL 8.0+、Oracle、SQL Server、PostgreSQL等),可以用RANK()函数实现,逻辑更简洁:
SELECT UserID FROM ( SELECT UserID, -- 按成就数量倒序排名 RANK() OVER (ORDER BY COUNT(Achievement) DESC) AS rank_num FROM Players GROUP BY UserID ) AS rank_result WHERE rank_num = 1
注:你之前提供的SQL是适配
EntitySite表的业务逻辑,和当前Players表的需求不匹配,以上两种写法均直接适配你给出的玩家成就表结构,可直接运行。
内容的提问来源于stack exchange,提问作者misha07380
相关产品推荐
相关产品推荐

