【问题标题】:SQL Query to get rank, name and score from specific personSQL Query 获取特定人员的排名、姓名和分数
【发布时间】:2018-07-20 11:02:33
【问题描述】:

我正在尝试从特定玩家那里获得排名、姓名和分数。

我使用这个查询只是为了显示排名(我在 PHP 中使用它):

SELECT  count(*) + 1 AS rank
FROM scores
WHERE score > (SELECT score FROM scores WHERE name = '$name');

我也尝试通过这种方式获取名称和分数:

SELECT  name, score, count(*) + 1 AS rank
FROM scores
WHERE score > (SELECT score FROM scores WHERE name = '$name');

但这会返回我上方玩家的分数和姓名。

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。并学习使用参数将常量值传递到您的查询中。
  • 看起来您不想从特定玩家那里获得名字,而是想要得分高于其他人的人的所有数据?或者$name是谁,你想找谁?

标签: sql mariadb rank


【解决方案1】:

要获得排名其他信息,我建议使用子查询:

select s.*,
       (select count(*) + 1
        from scores s2
        where s2.score > s.score
       ) as rank
from s
where name = ?;

? 是参数名称的占位符。您也可以使用命名参数。

注意:这不考虑关系。如果您对此感兴趣:

select s.*,
       (select count(distinct score)
        from scores s2
        where s2.score >= s.score
       ) as rank
from s
where name = ?;

【讨论】:

    【解决方案2】:
    SELECT name,score, @curRank := @curRank + 1 AS rank FROM user p, (SELECT @curRank := 0) r ORDER BY  score DESC
    

    请使用此查询进行排名计算。如果分数相同,请使用另一个参数计算排名

    例子:ORDER BY score DESC,user_id desc like that。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 2022-11-18
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      相关资源
      最近更新 更多