公司銷售人員負責各種産品的銷售,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.取第一條記錄
查詢的語句可以根據實際情況進行變化,可以計算其他不同情況,比如一年的銷售冠軍,一個季度的銷售冠軍等等。