下面的查询工作得非常好,正如我所需要的。所有用户获得唯一的RANKS(相同积分的用户不应获得相同的排名)
SELECT
id,
first_name,
email,
(SELECT
rank
FROM ( SELECT
@rownum:=@rownum+1 rank,
u.id AS user_id,
points
FROM
user_master u, (SELECT @rownum:=0) r
ORDER BY
points
DESC) AS tmp
WHERE
user_id = um.id) AS Rank,
registered_date AS registered,
um.points as Points
FROM
user_master um
ORDER BY
um.id ASC
现在我想查看这个查询,它给我错误信息
View's SELECT contains a subquery in the FROM clause
我还首先尝试创建用户排名 View 以合并 2 个不同的 View 。下面的查询给出了完美的用户排名,但是当我尝试查看时:
SELECT
@rownum:=@rownum+1 rank,
id AS user_id,
points
FROM
user_master u, (SELECT @rownum:=0) r
ORDER BY
points
DESC
..它给我错误信息:
View's SELECT contains a variable or parameter
是否有任何其他方法可以在此查询中应用排名(即使点数相同,排名也必须是唯一的)。
最佳答案
试一试:
create view test_view as SELECT t.id,t.first_name,t.email,
(select sum(case when t1.points > t.points then 1
when t1.points = t.points and t1.id < t.id then 1
else 0 end) from user_master t1)+1 as rank, t.registered_date AS registered,
t.points as Points
from user_master t
order by points desc;
关于mysql - 如何根据积分给查询排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8804390/