天天看點

SQL案例學習-月度銷售冠軍

公司銷售人員負責各種産品的銷售,emp_sales表中記錄了每個銷售人員每個月的銷售資料,

emp_sales表中的字段分别表示員工編号、銷售年份、銷售月份以及銷售金額。

SQL案例學習-月度銷售冠軍

查詢每個月的銷售冠軍

實作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案例學習-月度銷售冠軍

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
           

執行結果:

SQL案例學習-月度銷售冠軍

查詢銷售增長之星

查詢出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案例學習-月度銷售冠軍

SQL分析:

1.利用兩個子查詢分别擷取2021年1月的銷售情況和2021年6月的銷售情況

2.計算每個銷售人員的銷售金額增長情況,并排序

3.取第一條記錄

查詢的語句可以根據實際情況進行變化,可以計算其他不同情況,比如一年的銷售冠軍,一個季度的銷售冠軍等等。