序言
需求
今天源哥在开发中遇到了一个问题,需求如下:
- 有三位评委对三位选手进行打分并排名
- 如果三位选手的总分相同,则需要根据评委的最高分进行排名
- 如果最高分的个数相同,则比较第二高的分数,依次类推
乍一看,好像需求很简单,但是如果拿出每位选手的分数轮询比较,复杂度过高。而且如果以后存在多位分数相同的选手,轮询的方法效率更是低,于是我尝试在数据库层面就解决该问题。
经过我的反复分析,终于想出了一个我认为比较靠谱的方法
首先根据每位评委对选手的打分情况,找出总分相同的选手,为了方便各位读者的阅读,我直接做了几条测试数据,如图:
三位选手的总分,都是17分,意味着这三位选手将要根据最高得分数和最高分的数量进行较量
解题思路
源哥的设想是,根据每位选手的得分以及相同得分数量进行排序,然后再使用distinct关键字进行去重,说干就干,于是源哥得出了以下结果:
- 根据每位选手的得分以及相同得分数量进行排序
- 使用distinct关键字进行去重
此时可以看到,使用MySQL的distinct关键字进行去重后,得到了我们想要的结果,我们的本次分享也完美结束,源哥也应该为此奖励自己一把英雄联盟了!
如果你认为源哥的解决思路不能让你满意,或者你有更好的解决方式,请在评论区进行评论吧
我是源哥,各位看官的点赞,关注,收藏,就是对我的最大支持!感谢!