快过年了,这一年又是稀里糊涂地度过了,没什么成就,个人视野依然存在局限性。

一年又一年,感觉增长却只有年龄。

小时候盼望过年,盼望着快快长大。

现在却对过年有点恐惧,有点害怕过年了。

也不知从何时开始,对于过年,不再是那种期盼了,而是成为了一种负担和责任了。年年年过,却找不到儿时那么期盼的感觉了,不变的是周而复始的一年四季,变的是容颜。

兜兜转转,归来时已不再是曾经那位对什么都朦朦胧胧的少年了。

怕归怕,时间它才不会理会你,该来的总是它还是会来。

闲话说完,回归正题。

今天我们来看看大数据开发中row_number函数。

作为一名程序员,求职面试时时常会遇到需要编写一些基础的sql,编写sql这样做的目的主要是考验求职者的逻辑思维及编写sql基础能力。而row_number() 函数在面试中得到了不少面试官的青睐,有的面试官喜欢用这个知识点来考察应聘者。

我们来看看下面这道题目。

有张员工表tb_employee 表包含员工基本信息,每个员工有其对应的 user_id、user_name、salary和department_name

面试官:编写一个 SQL 查询,找出每个部门工资第二高的员工。

这种情况我们可以尝试用row_number() 函数实现。

语法

row_number() over(partition by [要分组的列]  order by [排序列])

row_number() 函数将select语句返回的每一行,从1开始编号,赋予其连续的序号。在查询时应用了一个排序标准后,只有通过序号才能够保证其顺序是一致的,当使用row_number() 函数时,也需要专门一列用于预先排序以便于进行编号。

partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组, 如果没有指定那么它把整个结果集作为一个分组,分区函数一般与排名函数一起使用。

create  table if not exists test.tb_employee(`user_id` int ,`user_name` string ,`salary` double ,`department_name` string
)row format delimited fields terminated by ',' stored as textfile;

新增数据

insert into test.tb_employee(user_id,user_name,salary,department_name) values(1,'李四',4000,'运营部');
insert into test.tb_employee(user_id,user_name,salary,department_name) values(2,'王五',5000,'运营部');
insert into test.tb_employee(user_id,user_name,salary,department_name) values(3,'张工',6000,'运营部');
insert into test.tb_employee(user_id,user_name,salary,department_name) values(4,'小爱',7000,'运营部');
insert into test.tb_employee(user_id,user_name,salary,department_name) values(5,'小张',3000,'行政部');
insert into test.tb_employee(user_id,user_name,salary,department_name) values(6,'小李',4000,'行政部');
insert into test.tb_employee(user_id,user_name,salary,department_name) values(7,'小王',5000,'行政部');
insert into test.tb_employee(user_id,user_name,salary,department_name) values(8,'小洪',6000,'行政部');
insert into test.tb_employee(user_id,user_name,salary,department_name) values(9,'小刘',7000,'行政部');

能看出每个部门工资第二高的员工分别为

--运营部编号为3的张工 薪资6000

--行政部编号为8的小洪 薪资6000

那么Sql如何编写,我们可以用row_number() 这样写。

select
*
from
(select*, row_number() over(partition by department_name order by salary desc) as rnfrom
test.tb_employee )as a
where
rn = 2;

关于row_number()函数,在大数据开发中,更多的是用来去重。可以根据分组,取rn=1最新的一条记录。

由于笔者知识及水平有限,文中错漏之处在所难免,如有不足之处,欢迎交流。

-END-

微信公众号:爱开发

这一年又是稀里糊涂地度过了相关推荐

  1. 大学,我们学到了什么

    写在前面的话 下面的这些只是一个正在想要自己在30而立的大学生的感悟,如果你已经做到管理层或是更高层,并且拥有一份还算不错的工资,那么这篇文章除了能给你一点点的美好大学生活的回忆之外,恐怕不能带给你任 ...

  2. VS2019正确创建C++步骤以及扩展插件美化你的VS2019的IDE开发环境

    使用扩展插件来美化你的IDE开发环境 前言 vs2019创建c++的步骤 1.错误分析 2.解决方法 拓展插件 附件 结语 前言 在安装了Visual Studio 2019社区版后,有的小伙伴会觉得 ...

  3. 转 carrer 之感

    引用:http://huzhenjie.blog.51cto.com/863711/885845 编者注:]徐是华为数据中心的头,技术超级牛人,一级部门总监,华为副总裁,年收入过千万,数据中心是用火山 ...

  4. 国防科大计算机研究生院,国防科大计算机学院在读硕士的程序人生!

    注:此人是我男朋友,是有次我要他写的命题作文.今天来这里小逛一下,心血来潮就把该文贴上来了,哈哈 我是一名程序员.虽然编程序的经历远远不能用丰富来形容,但接触程序总也有好几年了.说起来还真有些感触.其 ...

  5. 《当程序员的那些狗日日子》一

    作此文,祭奠我当程序员的那些狗日日子,并与所有仍在艰苦奋斗着的同行共勉. 这里所说的是"我"当程序员的那些狗日日子,但我绝对没有说别人当程序员是狗日日子.在这里我也并没有贬低&qu ...

  6. 华为十年(转贴)原华为牛人写的

    华为十年 徐家骏 2007年5月28日 (注:徐是华为数据中心的头,清华硕士,技术超级牛人,一级部门总监,华为副总裁,年收入过千万,数据中心是用火山岩建的深入地下的一个大型建筑.防辐射,可防卫星的电子 ...

  7. 华为牛人在华为工作十年的感悟!

    徐是华为数据中心的头,技术超级牛人,一级部门总监,华为副总裁,年收入过千万,数据中心是用 火山岩建的深入地下的一个大型建筑.防辐射,可防卫星的电子,雷达等手段的侦察.里面有象卫星发射 中心那种超大屏幕 ...

  8. 如何成为技术大牛(华为超级技术大牛的十年经验总结)

    华为超级技术大牛的十年经验总结  人类与动物的最大不同是积累知识可以传承学习,学习他人成功的经验可以让我们少 走弯路并缩短学习曲线,这里,华为大牛徐家骏的10年华为之路对每个人都有启迪和指导 意义!  ...

  9. 华为IT总监离职时给大家写了一封告别信

    华为IT总监离职时给大家写了一封告别信 一位华为IT总监离职时给大家写了一封告别信.信中表现出的职业素养和华为人的品质让人信服和感动,这似乎与时下广为散布的"狼性文化"唱了反调,华 ...

最新文章

  1. PHP手机号中间四位用星号*代替显示
  2. proj4经纬度bl转换xy_多种坐标系之间的转换之Proj.NET_转载
  3. CCIE路由实验(4) -- BGP路由控制
  4. Java “\”与\\的替换
  5. 基于JAVA+SpringBoot+Mybatis+MYSQL的校园兼职招聘系统
  6. LeetCode 260. Single Number III
  7. 面试题01.02 判定是否互为字符重排
  8. filezilla显示乱码(已解决)
  9. 伦敦时间现在几点_英国伦敦现在时间是几点
  10. 对于反向代理和正向代理的理解
  11. 51单片机小白零基础教程——独立键盘检测原理以及实际应用
  12. php中的乐观锁和悲观锁
  13. 走近“领域特定语言”
  14. rocketmq python消息堆积_MQ 消息构造--学会分解问题
  15. WAP手机安全上网防病毒攻略
  16. Tkinter实现窗口菜单栏
  17. 【SDK】01 支付宝当面付 - 沙箱环境
  18. 用计算机弹不可说,智者懂得,三种话不可说,三件事不必问(值得一读)
  19. 王爽 汇编语言第二版 课程设计2
  20. 团队程序设计天梯赛考点内容总结(15分以上题)

热门文章

  1. Linux DRM(一)Display Server
  2. 【MySQL | 运维篇】06、MySQL 分库分表之 MyCat 分片规则
  3. 3D游戏设计-天空盒
  4. 六月集训(第17天) —— 广度优先搜索
  5. 各种艺术字、图片在线制作
  6. 物流基础知识(十八)
  7. 怎么处理视频声音变声?视频声音变声处理软件哪个好?
  8. java单链表反转(头插法)详解
  9. Spring data Mongo $map转写用例
  10. js做个随机点名的小游戏