2

我有一个点表,其中一些列是:

| user_id | points |
--------------------
|   1     |   10   |
|   5     |   10   |
|   5     |   50   |
|   3     |   15   |
|   3     |   10   |

我想使用 MySQL 获得每个用户的排名。

我已经看到这篇文章MySQL get row position in ORDER BY但它没有 SUM,我无法让它与 SUM 一起使用。

我希望能够获得给定 user_id 的排名。

在此先感谢您的帮助!

4

6 回答 6

7

提醒OP的问题:

我希望能够获得给定 user_id 的排名。

为了实际执行操作,@rank您必须使用另一个派生表(是的,它效率低下,这就是为什么最好不要在 MySQL 中处理它):

SELECT * FROM (
  SELECT s.*, @rank := @rank + 1 rank FROM (
    SELECT user_id, sum(points) TotalPoints FROM t
    GROUP BY user_id
  ) s, (SELECT @rank := 0) init
  ORDER BY TotalPoints DESC
) r
WHERE user_id = 3

输出

| USER_ID | TOTALPOINTS | RANK |
|---------|-------------|------|
|       3 |          25 |    2 |

该过程基本上是:

  1. 获取每个用户的总积分
  2. 按总分排名排序
  3. 获得排名后过滤(否则,排名将受到影响)

在这里拉小提琴。

于 2013-10-11T13:20:25.263 回答
3

尝试这个::

SELECT @rownum:=@rownum + 1 as row_number, 
       t.*
FROM ( 

select user_id, SUM(points) as Addedpoint
from mytable group by user_id order by Addedpoint desc

) t,
(SELECT @rownum := 0) r
于 2013-10-11T13:11:20.983 回答
1

您可以使用子查询来实现,您应该在其中计算总和:

SELECT 
  @rank:=@rank+1 AS rank, 
  user_id, 
  total_points 
FROM 
  (SELECT 
    user_id, 
    SUM(points) AS total_points 
  FROM t 
  GROUP BY 
    user_id) AS sum_points 
CROSS JOIN 
  (SELECT @rank:=0) AS init 
ORDER BY 
  sum_points.total_points DESC

-看我的小提琴

于 2013-10-11T13:16:37.770 回答
0

使用用户变量,您可以执行以下操作:-

SELECT user_id, tot_points, @Rank:=@Rank + 1 AS user_rank
FROM
(
    SELECT user_id, SUM(points) AS tot_points
    FROM SomeTable
    GROUP BY user_id
    ORDER BY tot_points DESC
) Sub1
CROSS JOIN (SELECT @Rank:=0) Sub2
于 2013-10-11T13:14:02.877 回答
0
select 
@rownum := @rownum + 1 AS position, 
user_id, 
total_points

from
(select user_id, sum(points) as total_points from table)a 
join 
(SELECT @rownum := 0) r
order by total_points desc
于 2013-10-11T13:12:54.923 回答
0

http://sqlfiddle.com/#!2/d0be9/1

SET @rank=0;
select @rank:=@rank+1 AS rank, pointsScored.user_id, sumPoints
from (
   select user_id , SUM(points)as sumPoints
   from point
   group by user_id 
   order by  sumPoints desc
)as pointsScored
于 2013-10-11T13:39:51.827 回答