获取指定地图下击杀/死亡系数最高的Clan的SQL问题
解决SQL计算家族击杀/死亡系数的问题
嘿,我一眼就看出你遇到的问题啦!你写的SQL语句漏掉了关键的GROUP BY子句,这就导致数据库把所有符合map='map_1'条件的记录都合并成了一组来计算总和,自然只会返回一条错误的汇总结果,而不是每个家族各自的系数。
正确的SQL写法
SELECT `clanid`, SUM(kills)/NULLIF(SUM(deaths), 0) AS 'coef' FROM `test_user_stats` WHERE `map`='map_1' GROUP BY `clanid` -- 这行是你之前缺失的核心! ORDER BY `coef` DESC LIMIT 1;
关键部分解释
GROUP BY clanid:这一步是告诉数据库要按家族ID来分组统计,每个家族的击杀数和死亡数会单独汇总,而不是把所有家族的数据混在一起计算。NULLIF(SUM(deaths), 0):额外加这个是为了避免某个家族的死亡数总和为0时出现除以0的报错情况——如果死亡数是0,NULLIF会返回NULL,对应的系数也会变成NULL,排序时这类结果会被排到最后,不会影响我们取最高系数的需求。ORDER BY coef DESC+LIMIT 1:把计算出的系数从高到低排序,然后只取排名第一的那条结果,正好满足你要的“仅返回1条最高系数的家族记录”的需求。
验证逻辑
拿你给出的示例数据来说,正确执行后会分别计算clanid=2的系数(123/23≈5.347)和clanid=1的系数(23/32≈0.718),排序后会返回clanid=2和对应的系数,完全符合预期。
内容的提问来源于stack exchange,提问作者MrJunior
相关产品推荐
相关产品推荐

