mysql从结果排名

时间:2013-06-05 07:11:20

标签: mysql rank

很抱歉发布了另一个关于mysql排名的问题,但我看过的所有问题和答案对我没有帮助....

我有用户点的mysql表。用户可以获得更多结果。我的目标是从用户及其排名中获得最大结果。

CREATE TABLE results
(`user_id` int, `points` int);

INSERT INTO results VALUES
(1,10),
(2,20),
(3,20),
(4,30),
(4,60),
(5,5),
(1,80);

所以上层解决方案是:

rank | user_id | points
 1        1        80
 2        4        60
 3        3        20
 3        2        20
 4        5        5

2 个答案:

答案 0 :(得分:1)

以下查询可以解决问题:

SET @rank=0;
SET @points=0;

SELECT @rank := IF(@points = a.points, @rank, @rank + 1) AS rank, a.user_id, @points := a.points AS points
FROM (
  SELECT user_id, MAX(points) as points
  FROM results  
  GROUP BY user_id
) a
ORDER BY a.points DESC;

我还创建了一个SQLFiddle,以便您可以看到它有效:http://sqlfiddle.com/#!2/7ba2f/12

答案 1 :(得分:0)

在从计算每个用户的最大值的聚合别名查询中进行选择时,使用用户定义的变量来生成排名:

select
    (@rank := ifnull(@rank, 0) + 1) as rank,
    user_id,
    points
from (select
    user_id,
    max(points) as points
    from results
    group by 1
    order by 2 desc) x

仅供参考,UDV将生命视为空,因此ifnull()调用。