zoukankan      html  css  js  c++  java
  • mysql数据库(2)--窗口函数之序号函数

     一、什么是窗口函数

    窗口函数也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据进行联机分析处理。

    常见窗口函数的分类如上图所示,本节主要介绍窗口函数中的序号函数类

     二、窗口函数语法

    select 窗口函数() over (partition by 用于分组的类别,order by 用于排序的列名)

     三、序号函数类的作用

    1、解决排名问题,如对每个班级按成绩进行排名

    2、解决TopX的问题,如每个班级前X名的学生

     四、序号函数类的用法

    1、rank()

    1 #按班级分类,将成绩降序排序
    2 SELECT*,
    3 rank() over ( PARTITION BY 班级 ORDER BY 成绩 DESC)  AS ranking  
    4 FROM class; 

    (1)rank()是排序函数,括号中不需要有参数;

    (2)通过partition by将班级分类,相当于之前用过的group by子句功能,但是group by子句分类汇总会改变原数据的行数,而用窗口函数自救保持原行数。

    2、dense_rank(),row_number()的用法与rank()相同,它们之间的区别在于:

    以查询班级成绩为例,当出现成绩相同的情形时,

    (1)在rank()函数,如果有并列情况,会占用下一个名次的位置,比如,成绩为100的学生有三个并列第一,那么99分的学生是第二名,通过rank()函数,名次是:1,1,1,4;

    (2)dense_rank()函数中,如果有并列的情况,不会占用下一个名词,同用上个例子,名次是:1,1,1,2;

    (3)在row_number()函数中,会忽略并列的情况,同用上述例子,名次是:1,2,3,4.

     五、窗口函数应用案例

    附录:TopN问题的模板

    1 SELECT *
    2 FROM (SELECT*,row_number() over (PARTITION BY 姓名 ORDER BY 成绩 DESC) AS ranking 
    3 FROM test1) AS newtest
    4 WHERE ranking<=N;

    参考资料:

    https://zhuanlan.zhihu.com/p/138282683

  • 相关阅读:
    js中关于string的一些常用的方法
    HTML系列(九):表单
    HTML系列(八):表格
    HTML系列(七):多媒体
    HTML系列(六):划分文档结构
    HTML系列(五):超链接
    HTML系列(四):编辑图像
    HTML系列(三):文字设置
    HTML系列(二):头部meta元素
    HTML系列(一):创建HTML文档
  • 原文地址:https://www.cnblogs.com/yif930916/p/14816580.html
Copyright © 2011-2022 走看看