场景:在做一个小游戏排行榜,参加比赛用时最短,且游戏分数最高的玩家排名靠前
现在在想怎么排序,目前能想到的办法是用一个固定时间,减去比赛用时,然后将得出的结果加上游戏分数,再以此排序,不过我 SQL 水平有限,不知道应该怎么写,有大佬可以指点一下吗?谢谢
1
yitingbai 2021-06-19 16:28:20 +08:00
你描述的太矛盾了,时间最短和分数最高, 这两个维度到底以哪个为准呢?到底是竞速游戏还是积分游戏?
|
2
wpblank 2021-06-19 16:46:05 +08:00
这两项总得有一个权重吧?多弄一列保存他们的加权总分。
如果没权重单纯是时间优先的话,比如用时 1S,100 积分 排在 用时 2S,100 万积分的前面,那么直接 GROUP BY 用时,积分就行? |
4
KasuganoSoras OP @yitingbai 是一个赛车游戏,准确来说是漂移。游戏里车辆漂移的角度越大,得分越高,但是角度大了速度就慢,所以玩家需要在速度和角度之间找到一个平衡,能够做到速度不会太慢的同时分数高的人排名就高
上面说的这个思路应该是差不多对的,但是不知道怎么用 SQL 去实现。 |
5
yitingbai 2021-06-19 17:04:00 +08:00
@KasuganoSoras 楼上说的很对啊, 把时间换算成分数, 再 ORDER BY 分数
|
6
thunderw 2021-06-19 17:04:12 +08:00
不太慢是多慢?
你这个问题就不是会不会 SQL 的问题,而是根本就没想好算法的问题。 你的分数能够量化成数学公式吗?或者你举几个例子,具体的数字,你看能举出来不? 具体数据量化你能想清楚的话,写 SQL 也就是分分钟的事。 |
7
KasuganoSoras OP @thunderw 谢谢,确实是没想好,我重新想一下应该怎么做规则,谢谢大家了。
|
8
yiplee 2021-06-24 11:04:06 +08:00
赛车游戏应该谁最先通过终点谁就赢。为了鼓励漂移可以学习马里奥赛车,漂移之后有氮气加速效果,抵消漂移带来的降速效果。
|