MYSQL实现排名及查询指定用户排名功能(并列排名功能)实例代码

这里提供MYSQL实现排名及查询指定用户排名功能(并列排名)的SQL实例代码:

1. 全局排名

SELECT 
    user, score, 
    @rownum := @rownum + 1 AS rownum 
FROM users u, (SELECT @rownum := 0) r  
ORDER BY score DESC;

2. 指定用户排名

SELECT
    user, score,
    @rownum := IF(@prev = score, @rownum, @rownum + 1) AS rownum,
    @prev := score
FROM users u, (SELECT @rownum := 0, @prev := NULL) r 
WHERE u.user = 'John' 
ORDER BY score DESC;

3. 并列排名

SELECT
    user, score,
    @rank := IF(@prev = score, @rank, @rank + ROW_NUMBER() OVER(ORDER BY score DESC)) AS `rank`,
    @prev := score
FROM users u, (SELECT @rank := 0, @prev := NULL) r  
ORDER BY `rank`, score DESC;

以上代码分别实现了:

1. 全局用户排名:使用变量@rownum进行排名计数

2. 指定用户John的排名:使用变量@prev判断 score是否变化来决定增加排名数@rownum

3. 用户并列排名:使用ROW_NUMBER() OVER()函数生成临时排名,与变量@prev判断score变化决定最终rank排名这些SQL语句可以查询MySQL users表中各用户的成绩score排名情况。

并可以指定查询某个用户的排名,同时解决并列排名的问题。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论