mysql自定义变量

发布时间 2023-05-31 16:30:59作者: 来了发发发

1.自定义变量
语法:set @变量名:=值; (冒号可以不加)
或者 select @变量名:=值;(冒号必须加);
使用方法:select @变量名;

2.基础知识(用了变量后就是先排序):
mysql语句的执行顺序:正常是先查询后排序,但是如果 使用了变量,就是先排序后查询

1)先查询后排序:
select gender,
first_name as name,age from person order by name;

2)先排序后查询:
如果是先执行排序后执行查询,不可能查询出来0值;
如果是先执行查询后执行排序,会查询出来0值;
set @rownum:=0;
select
first_name,
gender,
@rownum
from person
where @rownum<=1
order by first_name,least(0,@rownum:=@rownum+1);

知识点:LEAST()函数是GREATEST()的相反函数。 其目的是为了返回从值列表(N1,N2,N3,和等)的项最少值。

数据分析面试之mysql的分组排序和变量赋值排序
根据不同性别进行人员分组,然后分组按照年龄进行升序排序得到序号

方法一:用窗口函数很容易:
select * ,row_number() over(partition by gender order by age) 排名
from person;
方法二:用变量定义的方法
注:mysql8.0中已经支持窗口函数,有rank关键字,故不能再使用rank作为自定义变量名称

select
first_name,gender,age,rankk
from
(select
first_name,
gender,
age,
@rankk:=if(@gen=gender,@rankk+1,1) as rankk,
@gen:=gender
from person,(select @rankk:=0,@gen:=null) temp -- 临时表做笛卡尔积
order by gender,age asc) a;
注:SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值,故这里使用select定义变量


select @rownum:=@rownum+1 as rownum, id
from trc_letter , (select @rownum:=0) t;