首页 > 代码库 > oracle 分组中排序(rank函数)
oracle 分组中排序(rank函数)
需求:
查询每个供应商在每个类型产品销售的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)
oracle 分组中排序(rank函数)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。