MYSQL函数(二)

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个等级。

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值