很抱歉发布了另一个关于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
答案 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()
调用。