mysql考试成绩排名-关于@rowtotal、@rownum

表:

mysql考试成绩排名-关于@rowtotal、@rownum

 

 数据:

mysql考试成绩排名-关于@rowtotal、@rownum

 

 1. 用户可以多次考试,以最新的为准

SELECT
    t.* 
FROM
    ( SELECT * FROM t_demo ORDER BY begin_time DESC ) t 
GROUP BY
    t.user_id 
ORDER BY
    t.score DESC 

结果:

mysql考试成绩排名-关于@rowtotal、@rownum

 

 2. 排名:分数一样的排名一样

SELECT
    obj.user_id,
    obj.score,
    obj.begin_time,
CASE
    
    WHEN @rowtotal = obj.score THEN
    @rownum 
    WHEN @rowtotal := obj.score THEN
    @rownum := @rownum + 1 
    WHEN @rowtotal = 0 THEN
    @rownum := @rownum + 1 
    END AS rownum 
FROM
    (
SELECT
    t.* 
FROM
    ( SELECT * FROM t_demo ORDER BY begin_time DESC ) t 
GROUP BY
    t.user_id 
ORDER BY
    t.score DESC 
    ) AS obj,
    ( SELECT @rownum := 0, @rowtotal := NULL ) r

解析:

mysql考试成绩排名-关于@rowtotal、@rownum

 

 @rownum初始值为0,@rowtotal初始值为null:@rowtotal :是复制的意思

第一次

第一个WHEN,不会执行

WHEN @rowtotal = obj.score THEN
@rownum

第二个WHEN,赋值后发现@rowtotal为100,100为true,将执行

@rownum为1

第三个WHEN,只有当第二个WHEN赋值后变为0,第二个WHEN不会执行,将执行第三个,即第一次遇到0执行

下一次遇到0,将在第一个WHEN就执行了。

mysql考试成绩排名-关于@rowtotal、@rownum

 

 

上一篇:Oracle获取每分钟、每10分钟、每小时、每天、每周、每月、每年的时间或日期


下一篇:mysql,字符串类型id,获取最大值