MySQL窗口函数—头尾函数-FIRST_VALUE和LAST_VALUE

举报
王小王-123 发表于 2022/03/25 00:10:50 2022/03/25
【摘要】 用途:返回第一个(FIRST_VALUE(expr))或最后一个(LAST_VALUE(expr))expr的值 应用场景:截止到当前,按照日期排序查询第1个入职和最后1个入职员工的薪资 select dname, ename, hiredate, salary, first_value(salary) over...

用途:返回第一个(FIRST_VALUE(expr))或最后一个(LAST_VALUE(expr))expr的值

应用场景:截止到当前,按照日期排序查询第1个入职和最后1个入职员工的薪资

select
  dname,
  ename,
  hiredate,
  salary,
  first_value(salary) over(partition by dname order by hiredate) as first,
  last_value(salary) over(partition by dname order by  hiredate) as last 
from  employee;

显示截止到目前为止某字段排名第几的值

用途:返回窗口中第n个expr的值。expr可以是表达式,也可以是列名

应用场景:截止到当前薪资,显示每个员工的薪资中排名第2或者第3的薪资

智能分组 根据字段数进行分组

用途:将分区中的有序数据分为n个等级,记录等级数

应用场景:将每个部门员工按照入职日期分成3组

-- 根据入职日期将每个部门的员工分成3组
select 
  dname,
  ename,
  hiredate,
  salary,
ntile(3) over(partition by dname order by  hiredate  ) as rn 
from employee;

这个有时候,与用于我们的自动分组,加入目前有999个人,老师喊你把这些人做一个分组,一共分成19个,那么难道你还去用计算机算一下吗,不用直接使用该ntile即可分组,而且分组比较快,不需要计算。

那么假如你拿到的是,学校的数据,一个学校里面有很多个学院,这个时候你需要根据学院进行分组,并且需要把第一组的人员找出来,然后给他们划分任务,这个时候直接在后面加一个条件即可。(子查询)

-- 取出每个部门的第一组员工
select
*
from
(
    SELECT 
        dname,
        ename,
        hiredate,
        salary,
    NTILE(3) OVER(PARTITION BY dname ORDER BY  hiredate  ) AS rn 
    FROM employee
)t
where t.rn = 1;

每文一语

每一次的实践都是成长!

文章来源: wxw-123.blog.csdn.net,作者:王小王-123,版权归原作者所有,如需转载,请联系作者。

原文链接:wxw-123.blog.csdn.net/article/details/123557573

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。