遇到了随便记录一下MySQL用户变量的使用

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的分组排序和变量赋值顺序

参考:Mysql 语句执行顺序

发布了125 篇原创文章 · 获赞 27 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/weixin_39428938/article/details/98219100