zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    Django中实现加载渲染模版
    【干货】批量文件合拼 cat 命令的使用
    【Sql】获取数据库字段信息
    【C#】 TxtHelper
    【Css】鼠标
    【HTTP】H5唤醒支付宝
    【dotnet】程序集注入
    【OpenXml】excel 导入导出
    一、API​​网关
    【kafka】二、kafka的基本概念
  • 原文地址:https://www.cnblogs.com/Springmoon-venn/p/6979235.html
Copyright © 2011-2022 走看看