0

我有一个如下所示的 SQL 查询:

SELECT member_id, Count(*) AS '# of Rounds'
FROM   score,cup_point
WHERE  session_id =?
       AND tour_id =?
       AND cup_point_id = `cup_point`.id
GROUP  BY member_id
ORDER  BY Sum(points) DESC
LIMIT  50 offset 0 

如何在查询中包含排名,以便:

  1. 我得到一个返回列,其中包含一个基于分数的数字 ie SUM(points),因此最高分数的排名为 1,依此类推。
  2. 使用偏移量和限制进行分页时,甚至当我按成员 ID 过滤时,我仍然可以获得该成员的正确排名 ( member_id) 吗?

谢谢。

4

1 回答 1

1

也许有一个子查询和一个正在运行的计数器

SET @x = 0;
SELECT member_id,NumRounds AS '# of Rounds',@x:=(@x+1) Rank FROM
(
SELECT member_id, Count(*) AS NumRounds
FROM   score,cup_point
WHERE  session_id =?
       AND tour_id =?
       AND cup_point_id = `cup_point`.id
GROUP  BY member_id
ORDER  BY Sum(points) DESC
LIMIT  50 offset 0 
) A;

我在 2012 年 6 月 8 日的 DBA StackExchange 中解决了类似的问题

试试看 !!!

于 2013-01-03T22:20:52.553 回答