MySql中@符号的使用
@
符号的作用
@
后接变量名,用以定义一个变量,该变量的有效期为语句级,即再一次执行中始终有效,基本示例如下:
-- 由于通常情况下=被认为是等于比较运算符,因此赋值运算符一般使用:=
SELECT @lt:=1, @lt:=@lt+1, @lt:=@lt+1;
实现rownum
-- 由于tmp只有一行,当这两表进行笛卡尔积链接时,结果集实际上等同于增加了一列,而由于r变量的特性,每行都在原值的基础上在进行增加操作
SELECT a.BATCHNO, a.YEAR, @r:=@r+1 FROM m1 a, (SELECT @r:=0) tmp;
实现窗口函数
-- base变量的初值,不能与窗口函数中partition by分组的枚举值相同
-- 实现此功能 row_number() (partition by base order by batchno) rn
-- case when 和 @base:= 的顺序不能颠倒,否则会有问题
SELECT a.BATCHNO, a.YEAR, a.BUDITEM, case when @base=a.BUDITEM then @r:=@r+1 ELSE
@r:=1 END rn, @base:=a.BUDITEM FROM m1 a, (SELECT @r:=1, @base:='') tmp ORDER BY a.buditem