mysql自定义变量

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;
posted @ 2023-05-31 16:27  来了发发发  阅读(138)  评论(0)    收藏  举报