基于分数创建唯一的等级,然后用mysql杀死

gv8xihay  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(264)

如何根据得分和杀戮给我的玩家分配独特的等级(mysql数据库)
我不想要的,但现在有:

Rank   |   Name   |   Score   |   Kills

1      |   Bob    |   900     |   45
2      |   Moby   |   400     |   35
2      |   Snake  |   400     |   38
3      |   Dick   |   240     |   20

我想要但没有的是:

Rank   |   Name   |   Score   |   Kills

1      |   Bob    |   900     |   45
2      |   Snake  |   400     |   38
3      |   Moby   |   400     |   35
4      |   Dick   |   240     |   20

当玩家有相同的得分和杀戮时,我仍然不希望他们有相同的等级,我有。。。你能帮忙吗,我用的是:

SELECT 
    FIND_IN_SET(score,(SELECT GROUP_CONCAT(score ORDER BY score DESC) FROM rankme)) rank,
    T1.name, 
    T1.score, 
    T1.kills, 
    T1.deaths, 
    T2.credits, 
    T1.connected 
FROM 
    rankme T1 
LEFT JOIN 
    store_players T2 
ON 
    T1.name = T2.name 
ORDER BY 
    T1.score DESC

编辑:我试过按t1.score,t1.kills排序,它确实通过移动杀戮最多的玩家来起作用,但是它仍然给两个玩家相同的排名。你怎么解决这个问题?

qkf9rpyu

qkf9rpyu1#

一个选项使用相关子查询:

SELECT *
FROM
(
    SELECT
        1 + (SELECT COUNT(*) FROM rankme t2
             WHERE t2.score > t1.score OR
                   (t2.score = t1.score AND t2.kills > t1.kills)) Rank,
        name,
        score,
        kills
    FROM rankme t1
) t
ORDER BY Rank;

演示

请注意,这个查询仍然有一个缺点:如果两个人在得分和击杀上完全并列,那么我们仍然会得到一个重复的排名。如果你关心这个问题,那就告诉我们你想怎样打破僵局。

相关问题