面试官编写一个SQL查询,找出每个部门工资第二高的员工
今天我们来看看大数据开发中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 rn from test.tb_employee )as a where rn = 2;
运行结果:
关于row_number()函数,在大数据开发中,更多的是用来去重。可以根据分组,取rn=1最新的一条记录。
由于笔者知识及水平有限,文中错漏之处在所难免,如有不足之处,欢迎交流。
餐饮业为什么使用商用洗碗机?1。提高洗涤速度酒店洗碗机的使用时间明显缩短,降低了员工的劳动强度和成本。2。降低损伤率餐馆里餐具的使用量一直在增加,机器洗碗不像人工洗碗那样磕磕碰碰,因此破损率也低。3。减少员工
自动洗碗机清洗餐具时水温的重要性为了省时省电,清洁餐具,应根据餐具的数量和餐具的脏污程序选择水温。洗碗机的控制机构一般包括程序控制器和选择开关。常温范围更适合人口较少的家庭,因为平时餐具用量不多,餐具上的油渍也可
商用洗碗机的分类及特点洗碗机是一种能自动清洗碗筷盘子碟子刀叉等餐具的设备。市场上的自动洗碗机可分为家用和商用两大类,家用自动洗碗机只适用于家庭,主要是橱柜台式机水槽一体机和一体机。商用洗碗机按结构可分为
洗碗机给我们带来的好处随着生活质量的提高,人们对生活质量的要求也越来越高。如今,越来越多的餐饮厨房也开始使用商用洗碗机。商用洗碗机有什么好处?一个好处是确保健康和安全洗碗机可以消毒烘干,其清洗效果是人工
群友分享的弘一大师书法群友分享的弘一大师书法。顶礼弘一大师。弘一法师语。以冰霜之操自励,则品日清高以穹窿之量容人,则德日广大以切磋之谊取友,则学问日精以慎重之行利生,则道风日远。弘一大师的书法何等精妙?
好广告,也能穿越百年许子东这样评价鲁迅一百年了,鲁迅的话就像在评论今天的报纸。至于广告,很多人是这样说的,再好的广告,也会在明天成为包早点的东西(指废纸一张)。上面这句话,简直等于一部长长的剧本,叫做
遍历山河,仍觉人间值得是怎样一种体验?这是我在知乎的一个回答。一直爱极了马一浮先生的名句已识乾坤大,犹怜草木青。今天看到题主问的这句,马先生的十个字又涌上心头。遍历山河,仍觉人间值得。这说的不就是百战归来仍是少年的人吗
女英雄(英雌)所见略同最近学着两个课程,一个是中关村最才的女梁宁的产品思维30讲,一个是奥美(也是华人广告界)文案女王林桂枝的创意课。很巧合的是,这两位老师在各自课程的第一节阐述自己的课程价值(能让大家
对商用洗碗机的认识根据最近媒体关于洗碗机普及程度的报道,洗碗机在世界范围内的普及率为3040,在国外的普及率为7080。然而,对于如此高的数据,洗碗机在中国的受欢迎程度仍然相对较低。近年来,企业看中
正确使用商用洗碗机的常识选择商用洗碗机并正确使用,不仅可以节约用水和洗涤剂,而且可以有效地洗碗,改善就餐环境和整体卫生。正确使用商用洗碗机的常识是什么?1如何使餐具干净?1。餐具使用后应尽快清洗干净。不要
商用洗碗机与人工洗碗相比对于那些长期在厨房洗碗的人来说,洗碗机无疑是一种让他们开心的武器。如今,洗碗机不仅具有洗碗的功能,而且还具有干燥和消毒的功能。洗碗机采用高压水喷淋清洗方法,智能清洁,洗涤,超快速清