MYSQL变量分两类
用户自定义变量
- 局部变量—>只在当前begin/end代码块中有效
create procedure add
(
in a int,
in b int
)
begin
declare c int default 0;
set c = a + b;
select c as c;
end;
2.用户变量—>在客户端链接到数据库实例整个过程中用户变量都是有效的。
系统变量
- 会话变量–>会话变量的作用域与用户变量一样,仅限于当前连接。当当前连接断开后,其设置的所有会话变量均失效。
@@session.变量名 或者@@local.变量名
4.全局变量–>全局变量影响服务器整体操作。
@@global.变量名
DEMO1:
-- 排序函数
-- row_number,rank,dense_rank
USE mytest;
row_number
-- row_number
SELECT empno,ename,sal,@rn:=@rn+1 rn
FROM emp,(SELECT @rn:=0)t1
ORDER BY sal DESC;
Demo2:
dense_rank
-- dense_rank
SELECT empno,ename,sal,
IF(@sal=sal,@rn,@rn:=@rn+1) rn,
@sal:=sal
FROM emp,(SELECT @rn:=0,@sal:=0) t1
ORDER BY sal DESC;
DEMO3:
– rank
-- rank
SELECT empno,ename,sal,@r:=@r+1,
IF(@sal=sal,@rn,@rn:=@r) rn, @sal:=sal
FROM emp,(SELECT @rn:=0, @r:=0,@sal:=0) t1 ORDER BY sal DESC;
DEMO4:
-- 将员工的信息,按照部门和底薪排序,并标明顺序
SELECT empno,ename,deptno,sal,
IF(@sal=sal,@rn,@rn:=@rn+1),
IF(@deptno=deptno,@rn,@rn:=1) rn,
@deptno:=deptno,
@sal:=sal
FROM emp,(SELECT @rn:=0,@sal:=0,@deptno:=0) t1
ORDER BY deptno,sal DESC;
end》》》
智者见智,仁者见仁,一个好的价值观念会让你懂得许多,学会更多,得到很多