MYSQL函数(二):
本篇博客主要用于介绍MySQL的函数部分,主要包括控制流函数,窗口函数中的序号函数,分布函数,聚合函数以及其他函数。
控制流函数
关于控制流函数一般有两大类,第一大类为关于IF的控制流函数,另一部分是CASE-WHEN函数
-- 判断
-- 案例一
-- 输入学生成绩来判断成绩的级别
delimiter $$
create procedure proc_12_if(in score int)
BEGIN
if score<60
THEN
select '不及格';
elseif score>=60 and score<80
then
select '及格';
elseif score>=80 and score<90
then
select '良好';
elseif score>=90 and score<=100
then
select '优秀';
ELSE
select '成绩错误';
end if;
END$$
delimiter;
set @score=65;
call proc_12_if(@score)
CASEexpression
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE result
END
CASE表示函数开始,END表示函数结束。
如果condition成立,则返回resuit1,如果condition2成立,则返回resuit2,当全部不成立则返回result,而当有一个成立之后,后面的就不执行了。select case when1=2then ‘tom’ when2=2then ‘ma
ry ‘else tim’ end:
select case 100 when 50 then tom’ when 100 then 'ma
y’else ‘tim’ end; condition1
序号函数
select
dname,
ename,
salary,
row_number() over(partition by dname order by salary desc)as rn1 ,
rank() over(partition by dname order by salary desc)as rn2 ,
dense_rank() over(partition by dname order by salary desc)as rn3 from employee;
在序号函数中有一个关键的问题即分组求topn的问题,代码实例如下所示
select*from (select dname,ename,salary,dense_rank()over(partition by dname order by salary desc) as rn from employee)t where t.rn<=3;
分布函数:
在SQL中我们常会用到分组的情况,即需要使用分布函数,下面请看实例
use mydb4;
select dname,
ename,
salary,
cume_dist()over (order by salary) as rn1,
cume_dist()over (partition by dname order by salary)as rn2
from employee;
前后函数
用于返回当前行的前n行或者后n行的值(lag lead)
头尾函数
(first_value last_value)
获取第一个和最后一个
其他函数
返回窗口第n个的值
(nth_value)
(ntile)将分区中的有序数据分成n个等级。