• 分组排序函数——row_number()


    1、MySQL8.0以上版本

    用法1:无分组排序

    Row_number() OVER(ORDER BY 字段 DESC)
    例如:Row_number() OVER(ORDER BY 学生成绩 DESC)
    表示不分班级,所有学生的成绩从高到低排序
    用法2:分组排序
    ROW_NUMBER() OVER(PARTITION BY 字段1 ORDER BY 字段2 DESC)
    表示根据字段1分组,在分组内部根据字段2排序,这个函数计算的值就表示每组内部排序后的顺序编号
    例如:ROW_NUMBER() OVER(PARTITION BY 班级 ORDER BY 学生成绩 DESC)
    表示根据“班级”分组,在每个“班级”内部根据“学生成绩”排序,这个函数计算的值就表示每组内部排序后的
    顺序编号
    解释:
    ROW_NUMBER( )  起到了编号的功能
    partition by  将相同数据进行分区
    order by    使得数据按一定顺序排序

    2、MySQL5.7版本

    用法1:无分组排序

    例如:计算销售人员的销售额,结果按从高到低排序,查询结果中要包含销售的排名

    SET @rank := 0;
    SELECT
    A.*,
    @rank := @rank + 1 AS rank 
    FROM
    ( SELECT sales_name, sum( sales ) FROM spm_order

    GROUP BY sales_name

    ORDER BY sum( sales ) DESC ) A

    用法2:分组排序

    例:计算销售人员在不同城市的销售额;

    要求:结果根据销售人员不同城市的销售额进行分组排序(降序),并且查询结果要包含分组排名

    SET @r := 0,
    @type := '';
    SELECT
     @r :=
    CASE WHEN @type = a.sales_name THEN
    @r + 1 ELSE 1
    END AS rowNum,
     @type := a.sales_name AS type,
      a.*
    FROM
    ( SELECT sales_name, city, sum( sales ) FROM spm_order

    GROUP BY sales_name, city

    ORDER BY sales_name, sum( sales ) DESC ) a;

  • 相关阅读:
    利用单片机构成高精度PWM式12位D/A
    【转】FORMAT在DELPHI中的用法
    可定时温湿控制器
    用C#获取硬盘序列号,CPU序列号,网卡MAC地址
    Oracle笔记:查询表相关
    Oracle笔记:视图
    Oracle笔记:维护数据的完整性
    Oracle笔记:索引
    Oracle笔记:pl/sql例外处理
    Oracle笔记:逻辑备份与恢复
  • 原文地址:https://www.cnblogs.com/liuxiaomin/p/11958788.html
Copyright © 2020-2023  润新知