在spark-sql實現排名每個店鋪中的銷量前十的商品
這裏主要用到的是窗體函數:rank()over(partition by 分區值 order by 排序值 DESC/ASC)
DESC 表示降序
ASC 表示升序
特別注意:寫sql時,變量名建議用英文
具體案例
第一步 :先進行子查詢,
select 店鋪名稱,商品名稱,sum(銷量)as 銷量 from 銷量表 group by 店鋪名稱,商品名稱;
第二步:嵌套查詢+窗體函數排序
select 店鋪名稱,商品名稱 from(
select 店鋪名稱,商品名稱,rank()over(partition by 店鋪名稱 order by 銷量 desc )as 排序 from(
select 店鋪名稱,商品名稱,sum(銷量)as 銷量
from 銷量表 group by 店鋪名稱,商品名稱
)
)where 排序<=10;
排序<=10 代表銷量前十,如果小於<=3 ,那就是每個店鋪銷量的的前3名。
隨筆結束