需求:
查詢每個供應商在每個類型產品銷售的top50中有多少
分析:
1.查詢,以指定字段(供應商、產品類型)分組,取每個分組的前50行,查看每個供應商的數量
2.使用rank函數給每個供應商、每個類型產品的銷售量做個排名,添加偽劣ran
3.篩選ran小於等於50的行,以供應商、產品類型分組,count
sql:
select gyscode 供應商編碼, typeid 類型id, count(1) num from (select t.gyscode, t.typeid, sum(t.sale) sale, rank() over(partition by t.gyscode, t.typeid order by sum(b.sale) desc) ran from t_sale t where -- 計算周期:上月1到上月最后一天 t.log_date>= add_months(trunc(sysdate, 'mm'), -1) and t.log_date<= last_day(add_months(trunc(sysdate, 'mm'), -1)) group by t.gyscode, t.typeid)
where ran <= 50 group by gyscode, typeid
注:runk函數兩種用法:
dense_rank:連續排名,如果有兩個供應商的銷售額一樣,排名相同,但是下一個供應商的排名+1
rank:不連續排名,如果有兩個供應商的銷售額一樣,排名相同,但是下一個供應商的排名+2(2:銷售額相同的供應商數量)
runk函數有兩種排名:
1.所有結果排名(不加partition,相當於以某個字段排序后的rownum)
2.分組排名(加partition)