求教顺丰大数据笔试SQL题

今天大数据笔试的SQL简答题怎么做呀,本人是学了SQL没几天的小白,抱着学习心态笔试。
我只会COUNT GROUP BY排序然后分页找出所有大区area的10-20位,但是不知道怎么得到各大区的10-20名?求教各位大佬,感谢!

题目大概是两个表
员工表employee_info: e_id, e_name, area
运单表bill_info: b_id, e_id, date
返回各大区8月按运单数从高到低第10-20名的员工信息

#MySQL##大数据开发工程师##顺丰科技#
全部评论
partition by area
点赞 回复
分享
发布于 2019-08-29 23:12
--首先求出每个员工的收件总量 with base0 as ( select e_id,count(b_id) as sl  from bill_info where year(data)=2019 and month(data)=8 group by e_id ), --然后求出每个大区的员工及其收件量 base1 as ( select a.e_id,a.e_name,a.area,b.sl from employee_info left join base0 b on a.e_id = b.e_id group by a.area ) --对数量排序并选取10-20名信息 select e_name,e_id,sl from  (select e_name,e_id,sl,rank() over (partition by area order by sl desc) as rank from base1 where 10<=rank<=20)a
点赞 回复
分享
发布于 2019-08-30 10:50
联想
校招火热招聘中
官网直投
select area,e_id,e_name,数量,rank_num from (select b.e_id,count(b.b_id) as 数量,area,e.e_name,rank()over(partition by area order by count(b.b_id) desc) as rank_num  from  bill_info b left join employee_info e on b.e_id=e.e_id  where year(date)=2019 and month(date)=8 group by area,b.e_id)t where 10<=rank_num<=20;
点赞 回复
分享
发布于 2019-08-31 21:53
select  area, e_id, e_name, ranking from ( select  area, e_id, e_name, row_number() over(partition by area order by b_num desc) as ranking from ( select  e.area,  e.e_id,  e.e_name, count(distinct b_id) as b_num from employee_info e  join bill_info b  on e.e_id = b.e_id and month(b.date) = 8 group by e.area, e.e_id, e.e_name ) a ) b where ranking between 10 and 20 ;
点赞 回复
分享
发布于 2019-09-01 10:45
select area, a.e_id, e_name,  rank () over (partition by area order by cnt desc) from employee_info a   left join ( select e_id, count(b_id) as cnt ,to_char(date,'yy&(458)#39;)   from bill_info  where to_char(date,'yy&(458)#39;)='08'  group by e_id ) b  on a.e_id=b.e_id where rank ()  over (partition by area order by cnt) between 10 and 20 group by area, a.e_id, e_name
点赞 回复
分享
发布于 2020-08-23 17:06

相关推荐

点赞 30 评论
分享
牛客网
牛客企业服务