公司销售人员负责各种产品的销售,emp_sales表中记录了每个销售人员每个月的销售数据,
emp_sales表中的字段分别表示员工编号、销售年份、销售月份以及销售金额。

查询每个月的销售冠军
实现SQL:
--月度销售冠军
select * from
(
select s.sale_year,
s.sale_month,
e.emp_name,
s.amount,
row_number() over(partition by s.sale_year,s.sale_month order by s.amount desc) rn
from emp_sales s
join employee e on s.emp_id = e.emp_id
)
where rn = 1
执行结果:
SQL分析:
利用row_number() over()窗口函数先按照年份和月份进行分组,分组后的数据再根据销售金额排序,最终查询出每个组内销售金额最高的员工信息。
查询2021年上半年的销售冠军
实现SQL:
--季度销售冠军
select * from (
select sale_year,emp_name,row_number() over(partition by sale_year order by amount desc) rn1 from (
select * from
(
select s.sale_year,
s.sale_month,
e.emp_name,
s.amount,
row_number() over(partition by s.sale_year,s.sale_month order by s.amount desc) rn
from emp_sales s
join employee e on s.emp_id = e.emp_id
)
where rn = 1 and SALE_YEAR = 2021 and SALE_MONTH in (1,2,3,4,5,6)
)
)where rn1 = 1
执行结果:
查询销售增长之星
查询出2021年1月到6月销售金额增长最快的员工
实现SQL:
select t.emp_name as "员工姓名",t.sales_change as "增长金额" from
(
select e.emp_name,s06.amount-s01.amount as sales_change from (
select s.emp_id,s.amount from emp_sales s
where s.sale_year=2021 and s.sale_month=1
) s01
join (
select s.emp_id,s.amount from emp_sales s
where s.sale_year=2021 and s.sale_month=6
) s06 on s01.emp_id=s06.emp_id
join employee e on s01.emp_id = e.emp_id
order by sales_change desc
) t
where rownum < 2
执行结果:
SQL分析:
1.利用两个子查询分别获取2021年1月的销售情况和2021年6月的销售情况
2.计算每个销售人员的销售金额增长情况,并排序
3.取第一条记录
查询的语句可以根据实际情况进行变化,可以计算其他不同情况,比如一年的销售冠军,一个季度的销售冠军等等。