码迷,mamicode.com
首页 > 数据库 > 详细

oracle 分组中排序(rank函数)

时间:2017-06-10 18:25:57      阅读:362      评论:0      收藏:0      [点我收藏+]

标签:指定   指定字段   编码   from   mon   run   esc   div   and   

需求:

  查询每个供应商每个类型产品销售的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函数)

标签:指定   指定字段   编码   from   mon   run   esc   div   and   

原文地址:http://www.cnblogs.com/Springmoon-venn/p/6979235.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!