mysql - 如何根据积分给查询排名

标签 mysql

下面的查询工作得非常好,正如我所需要的。所有用户获得唯一的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/

相关文章:

mysql - 案例 : choose value in column B base on condition in column A

mysql - 改进 mysql 中的文件路径搜索

mysql - 计算出现次数最多的字符串

mysql - 使用 group by、where 和 'flag' 优化单表查询

mysql - Pentaho Kettle 脚本选项

php - 使用 SQL Select 语句更新临时表的问题

mysql - 调整 "copy to tmp table"批量大小

mysql - 替换 INTERSECT 以与 phpmyadmin 一起使用

如果满足某些条件则 MySQL 更新(或创建过程)

mysql - Wordpress 用户和用户元 - 将一个表中的多行连接到另一个表中的一行