【问题标题】:Use COUNT(), ORDER BY and WHERE user = ? simultaneously [duplicate]使用 COUNT()、ORDER BY 和 WHERE user = ?同时[重复]
【发布时间】:2016-02-26 04:59:51
【问题描述】:

我有一张高分表。当我阅读它们时,我按分数 DESC 排序。

scores
id  name  score

SELECT name, score FROM scores ORDER BY score DESC

现在我想知道一个人的等级。我正在尝试找到一种方法来组合它,而不必遍历所有高分。这是我的想法,但我知道这行不通。有什么想法吗?

SELECT COUNT(id), name, score FROM scores WHERE name = ? ORDER BY score DESC

我应该使用 WHERE 吗?

【问题讨论】:

  • 当你说排名时,你是指他们在结果集中的索引吗?
  • 一个人的等级是什么意思?
  • 我的意思是计数的数字。例如:我按分数 DESC 排序。然后我开始计算行数以获得它们的排名:1、2、3、4。
  • 听起来你想要这样的东西:stackoverflow.com/questions/1895110/row-number-in-mysql
  • 我需要知道 1 条记录的行号(例如 WHERE name = ?)

标签: mysql sql


【解决方案1】:

您可以计算子查询中得分较高的每个人:

select coalesce((select count(1) from scores b where b.score > a.score),0) + 1 Rank
, Name
, Score
from Scores a
where name = 'Sarah'

SQL 小提琴:http://sqlfiddle.com/#!9/ff0133/3

【讨论】:

  • #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 '(order by score desc) rank , score from scores order by score desc LIMIT 0, 30' 附近使用正确的语法
  • 道歉;我会回答MS SQL;对于MySQL,请参阅更新答案中的链接。
  • 这不是我的问题的答案。我需要知道一个人的等级(例如 WHERE name = ?)
  • 道歉;今天没有它;再次更正。
  • 感谢您的回答。这个解决方案比我之前用的那个好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-21
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多