1.建表语句,数据准备,参考: sql查询每个班级的前三名
2.mysql用户变量,mysql中用户变量不用提前申明,在用的时候直接用“@变量名”使用就可以了,其作用域为当前连接。
-- 第一种用法,使用set时可以用“=”或“:=”两种赋值符号赋值
set @rownum := 0;
set @rownum = 0;
-- 第二种用法,使用select时必须用“:=”赋值符号赋值,因为select语句中“=”是比较符号,像“>”
select @rownum := 0;
2.分析sql语句如下,
select @pre_class := null, @rownum := 0 是变量的初始化,相当于 set @pre_class := null, @rownum := 0;
if 判断,
当class不一样的时候,rounum重新初始化为1 。
SELECT class, score, name,
@rownum := if(@pre_class = class, @rownum + 1, 1) rownum,
@pre_class := class
FROM test_score,(select @pre_class := null, @rownum := 0) temp
order by class asc, score desc
3.查询结果如下,先按班级分组,再按分数排序,分别标记rownum值,此时rownum值已经从大到小被排序标记。
4.这个时候查询,每个班级的前三名,只要取rownum小于4的数据即可,sql如下,
select *
from (SELECT class, score, name,
@rownum := if(@pre_class = class, @rownum + 1, 1) rownum,
@pre_class := class
FROM test_score,
(select @pre_class := null, @rownum := 0) temp
order by class asc, score desc) T
where rownum < 4
5.注意变量赋值的顺序,
sql执行顺序
(01) from
(03) join
(02) on
(04) where
(05) group by(开始使用select中的别名,后面的语句中都可以使用)
(06) avg,sum....
(07) having
(08) select
(09) distinct
(10) order by
参考:MySQL变量的使用
参考:Mysql 语句执行顺序