mysql中自定义变量(浅显易懂简洁版)
select,set定义变量
·
1.自定义变量
语法:set @变量名:=值; (冒号可以不加)
或者 select @变量名:=值;(冒号必须加);
使用方法:select @变量名;
需求:要求两个数的和
set @m:=3;
set @n:=2;
select @res:=@m+@n;
select @m+@n into @num;
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 least函数
3.inner join 的简写
select * from a inner join b on a.id =b.id;
简写:实际上是a,b表做了笛卡尔积(所有的记录两两做关联),然后用where做筛选,留下符合条件的
select * from a,b where a.id=b.id;
4.需求
数据分析面试之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定义变量
mysql中select与set_sql 中set和select区别
mysql中set赋值报错
更多推荐
已为社区贡献1条内容
所有评论(0)