SQL案例学习-月度销售冠军

公司销售人员负责各种产品的销售,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.取第一条记录

查询的语句可以根据实际情况进行变化,可以计算其他不同情况,比如一年的销售冠军,一个季度的销售冠军等等。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值