zoukankan      html  css  js  c++  java
  • SQL Server 之 与 OVER() 函数

      在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数。

    一、 OVER() 函数

      语法结构:OVER( [ PARTITION BY ... ] [ ORDER BY ... ] )

      [1] PARTITION BY 子句进行分组;

      [2] PARTITION BY 子句进行排序。

      窗口函数OVER()指定一组行,开窗函数计算从窗口函数输出的结果集中各行的值。

      开窗函数不需要使用GROUP BY就可以对数据进行分组,还可以同时返回基础行的列和聚合列。

      OVER()函数不能单独使用,必须跟在 排名函数 或 聚合函数后边。

    二、排名开窗函数

      ROW_NUMBER()、DENSE_RANK()、RANK()、NTILE()属于排名函数。

      排名开窗函数可以单独使用ORDER BY 语句,也可以和PARTITION BY同时使用。

      PARTITION BY用于将结果集进行分组,开窗函数应用于每一组。

      ODER BY 指定排名开窗函数的顺序。

      注意:在排名开窗函数中必须使用ORDER BY语句。

      语法结构:排名函数 ( ) OVER ( [ <partition_by子句> ] <order_by子句> ) 

      1、ROW_NUMBER():为每一组的行记录按顺序生成一个唯一的行号。

      2、RANK()也为每一组的行生成一个序号,与ROW_NUMBER()不同的是如果按照ORDER BY的排序,如果有相同的值会生成相同的序号,并且接下来的序号是不连序的。例如两个相同的行生成序号3,那么接下来会生成序号5。

      3、DENSE_RANK()和RANK()类似,不同的是如果有相同的序号,那么接下来的序号不会间断。也就是说如果两个相同的行生成序号3,那么接下来生成的序号还是4。

      4、NTILE (integer_expression) 按照指定的数目将数据进行分组,并为每一组生成一个序号。

    三、聚合开窗函数

      很多聚合函数都可以用作窗口函数的运算,如COUNT(),SUM(),AVG(),MAX(MIN()。

      聚合开窗函数只能使用PARTITION BY子句或都不带任何语句,ORDER BY不能与聚合开窗函数一同使用。

      如果窗口函数不使用PARTITION BY 语句的话,那么就是不对数据进行分组,聚合函数计算所有的行的值。

      语法结构:聚合函数( ) OVER ( [ <partition_by子句> ] ) 

  • 相关阅读:
    贝叶斯定理
    用matplotlib统计数据并画图
    词云图
    一行python代码能写出啥?
    用python生成二维码
    18个python的高效编程技巧
    django简介
    vue点击变色
    selenium破解人人登陆验证码
    selenium请求豆瓣网
  • 原文地址:https://www.cnblogs.com/xinaixia/p/5806217.html
Copyright © 2011-2022 走看看