这一年又是稀里糊涂地度过了
快过年了,这一年又是稀里糊涂地度过了,没什么成就,个人视野依然存在局限性。
一年又一年,感觉增长却只有年龄。
小时候盼望过年,盼望着快快长大。
现在却对过年有点恐惧,有点害怕过年了。
也不知从何时开始,对于过年,不再是那种期盼了,而是成为了一种负担和责任了。年年年过,却找不到儿时那么期盼的感觉了,不变的是周而复始的一年四季,变的是容颜。
兜兜转转,归来时已不再是曾经那位对什么都朦朦胧胧的少年了。
怕归怕,时间它才不会理会你,该来的总是它还是会来。
闲话说完,回归正题。
今天我们来看看大数据开发中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-
微信公众号:爱开发
这一年又是稀里糊涂地度过了相关推荐
- 大学,我们学到了什么
写在前面的话 下面的这些只是一个正在想要自己在30而立的大学生的感悟,如果你已经做到管理层或是更高层,并且拥有一份还算不错的工资,那么这篇文章除了能给你一点点的美好大学生活的回忆之外,恐怕不能带给你任 ...
- VS2019正确创建C++步骤以及扩展插件美化你的VS2019的IDE开发环境
使用扩展插件来美化你的IDE开发环境 前言 vs2019创建c++的步骤 1.错误分析 2.解决方法 拓展插件 附件 结语 前言 在安装了Visual Studio 2019社区版后,有的小伙伴会觉得 ...
- 转 carrer 之感
引用:http://huzhenjie.blog.51cto.com/863711/885845 编者注:]徐是华为数据中心的头,技术超级牛人,一级部门总监,华为副总裁,年收入过千万,数据中心是用火山 ...
- 国防科大计算机研究生院,国防科大计算机学院在读硕士的程序人生!
注:此人是我男朋友,是有次我要他写的命题作文.今天来这里小逛一下,心血来潮就把该文贴上来了,哈哈 我是一名程序员.虽然编程序的经历远远不能用丰富来形容,但接触程序总也有好几年了.说起来还真有些感触.其 ...
- 《当程序员的那些狗日日子》一
作此文,祭奠我当程序员的那些狗日日子,并与所有仍在艰苦奋斗着的同行共勉. 这里所说的是"我"当程序员的那些狗日日子,但我绝对没有说别人当程序员是狗日日子.在这里我也并没有贬低&qu ...
- 华为十年(转贴)原华为牛人写的
华为十年 徐家骏 2007年5月28日 (注:徐是华为数据中心的头,清华硕士,技术超级牛人,一级部门总监,华为副总裁,年收入过千万,数据中心是用火山岩建的深入地下的一个大型建筑.防辐射,可防卫星的电子 ...
- 华为牛人在华为工作十年的感悟!
徐是华为数据中心的头,技术超级牛人,一级部门总监,华为副总裁,年收入过千万,数据中心是用 火山岩建的深入地下的一个大型建筑.防辐射,可防卫星的电子,雷达等手段的侦察.里面有象卫星发射 中心那种超大屏幕 ...
- 如何成为技术大牛(华为超级技术大牛的十年经验总结)
华为超级技术大牛的十年经验总结 人类与动物的最大不同是积累知识可以传承学习,学习他人成功的经验可以让我们少 走弯路并缩短学习曲线,这里,华为大牛徐家骏的10年华为之路对每个人都有启迪和指导 意义! ...
- 华为IT总监离职时给大家写了一封告别信
华为IT总监离职时给大家写了一封告别信 一位华为IT总监离职时给大家写了一封告别信.信中表现出的职业素养和华为人的品质让人信服和感动,这似乎与时下广为散布的"狼性文化"唱了反调,华 ...
最新文章
- PHP手机号中间四位用星号*代替显示
- proj4经纬度bl转换xy_多种坐标系之间的转换之Proj.NET_转载
- CCIE路由实验(4) -- BGP路由控制
- Java “\”与\\的替换
- 基于JAVA+SpringBoot+Mybatis+MYSQL的校园兼职招聘系统
- LeetCode 260. Single Number III
- 面试题01.02 判定是否互为字符重排
- filezilla显示乱码(已解决)
- 伦敦时间现在几点_英国伦敦现在时间是几点
- 对于反向代理和正向代理的理解
- 51单片机小白零基础教程——独立键盘检测原理以及实际应用
- php中的乐观锁和悲观锁
- 走近“领域特定语言”
- rocketmq python消息堆积_MQ 消息构造--学会分解问题
- WAP手机安全上网防病毒攻略
- Tkinter实现窗口菜单栏
- 【SDK】01 支付宝当面付 - 沙箱环境
- 用计算机弹不可说,智者懂得,三种话不可说,三件事不必问(值得一读)
- 王爽 汇编语言第二版 课程设计2
- 团队程序设计天梯赛考点内容总结(15分以上题)