MySQL函数

目录

1.分布函数 CUME_DIST 和 percent_rank

2.前后函数 -LAG和LEAD

3.头尾函数 -FIRST_VALUE和LAST_VALUE

4.其他函数 -NTH_VALUE(expr,n),NTILE(n)

-NTH_VALUE(expr,n)

  NTILE(n)


1.分布函数 CUME_DIST 和 percent_rank


 用途: 分组内小于,等于当前rank值的行数 / 分组内总行数  求比例
 应用场景: 查询小于等于当前薪资(salary)的比例
 

 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;
 
 /*
 0.25  3/12=0.25
 0.416 5/12=0.416
 */
select 
  dname,
  ename,
	salary,
	rank() over(partition by dname order  by salary) as rn1,
  PERCENT_RANK() over(partition by dname order  by salary) as rn2
  from employee;

2.前后函数 -LAG和LEAD

用途: 返回位于当前行的前n行(LAG(expr,n))或后n行(LEAD(expr,n))的expr的值
应用场景:查询前一名同学的成绩和当前同学成绩的差值

select 
  dname,
	ename,
	salary,
	hiredate,
	lag(hiredate,1,'2000-01-01') over(partition by dname order by hiredate) AS time1,
  lag(hiredate,2) over(partition by dname order by hiredate) as time1
 from employee;
 
 
 select 
  dname,
	ename,
	salary,
	hiredate,
	lead(hiredate,1,'2000-01-01') over(partition by dname order by hiredate) AS time1,
  lead(hiredate,2) over(partition by dname order by hiredate) as time1
 from employee;
 

3.头尾函数 -FIRST_VALUE和LAST_VALUE

用途: 返回第一个FIRST_VALUE(expr) 或最后一个LAST_VALUE(expr)的值
应用场景: 截止到目前,按照日期排序查询第1个入职和最后1个入职员工的薪资

select 
  dname,
	ename,
	salary,
	hiredate,
	FIRST_VALUE(salary) over(partition by dname order by hiredate) ,
  LAST_VALUE(salary) over(partition by dname order by hiredate) 
 from employee;

4.其他函数 -NTH_VALUE(expr,n),NTILE(n)

-NTH_VALUE(expr,n)


 用途: 返回窗口中第n个expr的值。expr可以是表达式,也可以是列名
 应用场景:截止到当前薪资,显示每个员工的薪资中排名第2或者第3的薪资

select 
  dname,
	ename,
	salary,
	hiredate,
	nth_VALUE(salary,2) over(partition by dname order by hiredate) ,
  nth_VALUE(salary,3) over(partition by dname order by hiredate) 
 from employee;
 


 
 NTILE(n)


 用途:讲分区中的有序数据分为n个等级,记录等级数
 应用场景:将每个部门员工按照入职日期分成3组

select 
  dname,
	ename,
	salary,
	hiredate,
	NTILE(4) over(partition by dname order by hiredate) 
-- 取出每一个部门的第一组员工
 SELECT
 *
 from(
 select 
  dname,
	ename,
	salary,
	hiredate,
	NTILE(3) over(partition by dname order by hiredate ) as rn
	from employee
	) t 
	where t.rn=1;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值