返回顶部
首页 > 资讯 > 数据库 >SQL中的开窗函数是什么
  • 946
分享到

SQL中的开窗函数是什么

2024-04-02 19:04:59 946人浏览 安东尼
摘要

本篇内容主要讲解“sql中的开窗函数是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL中的开窗函数是什么”吧!OVER的定义OVER用于为行定义一个窗口

本篇内容主要讲解“sql中的开窗函数是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL中的开窗函数是什么”吧!

OVER的定义

OVER用于为行定义一个窗口,它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。

OVER的语法

OVER ( [ PARTITioN BY column ] [ ORDER BY culumn ] )

PARTITION BY 子句进行分组;

ORDER BY 子句进行排序

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

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

OVER的用法

OVER开窗函数必须与聚合函数或排序函数一起使用,聚合函数一般指SUM(),MAX(),MIN,COUNT(),AVG()等常见函数。排序函数一般指RANK(),ROW_NUMBER(),DENSE_RANK(),NTILE()等。

OVER在聚合函数中使用的示例

我们以SUM和COUNT函数作为示例来给大家演示。

--建立测试表和测试数据
CREATE TABLE Employee
(
ID INT  PRIMARY KEY,
Name VARCHAR(20),
GroupName VARCHAR(20),
Salary INT
)
INSERT INTO  Employee
VALUES(1,'小明','开发部',8000),
      (4,'小张','开发部',7600),
      (5,'小白','开发部',7000),
      (8,'小王','财务部',5000),
      (9, null,'财务部',NULL),
      (15,'小刘','财务部',6000),
      (16,'小高','行政部',4500),
      (18,'小王','行政部',4000),
      (23,'小李','行政部',4500),
      (29,'小吴','行政部',4700);

SUM后的开窗函数

SELECT *,
     SUM(Salary) OVER(PARTITION BY Groupname) 每个组的总工资,
     SUM(Salary) OVER(PARTITION BY groupname ORDER BY ID) 每个组的累计总工资,
     SUM(Salary) OVER(ORDER BY ID) 累计工资,
     SUM(Salary) OVER() 总工资
from Employee

(提示:可以左右滑动代码)

结果如下:

SQL中的开窗函数是什么

其中开窗函数的每个含义不同,我们来具体解读一下:

SUM(Salary) OVER (PARTITION BY Groupname)

只对PARTITION BY后面的列Groupname进行分组,分组后求解Salary的和。

SUM(Salary) OVER (PARTITION BY Groupname ORDER BY ID)

对PARTITION BY后面的列Groupname进行分组,然后按ORDER BY 后的ID进行排序,然后在组内对Salary进行累加处理。

SUM(Salary) OVER (ORDER BY ID)

只对ORDER BY 后的ID内容进行排序,对排完序后的Salary进行累加处理。

SUM(Salary) OVER ()

对Salary进行汇总处理

COUNT后的开窗函数

SELECT *,
       COUNT(*) OVER(PARTITION BY Groupname ) 每个组的个数,
       COUNT(*) OVER(PARTITION BY Groupname ORDER BY ID) 每个组的累积个数,
       COUNT(*) OVER(ORDER BY ID) 累积个数 ,
       COUNT(*) OVER() 总个数
from Employee

返回的结果如下图:

SQL中的开窗函数是什么

后面的每个开窗函数就不再一一解读了,可以对照上面SUM后的开窗函数进行一一对照。

OVER在排序函数中使用的示例

我们对4个排序函数一一演示

--先建立测试表和测试数据
WITH t AS
(SELECT 1 StuID,'一班' ClassName,70 Score
UNION ALL
SELECT 2,'一班',85
UNION ALL
SELECT 3,'一班',85
UNION ALL
SELECT 4,'二班',80
UNION ALL
SELECT 5,'二班',74
UNION ALL
SELECT 6,'二班',80
)
SELECT * INTO Scores FROM t;
SELECT * FROM Scores

ROW_NUMBER()

定义:ROW_NUMBER()函数作用就是将SELECT查询到的数据进行排序,每一条数据加一个序号,他不能用做于学生成绩的排名,一般多用于分页查询,比如查询前10个 查询10-100个学生。ROW_NUMBER()必须与ORDER BY一起使用,否则会报错。

对学生成绩排序

SELECT *,
ROW_NUMBER() OVER (PARTITION BY ClassName ORDER BY SCORE DESC) 班内排序,
ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS 总排序
FROM Scores;

结果如下:

SQL中的开窗函数是什么

这里的PARTITION BY和ORDER BY的作用与我们在上面看到的聚合函数的作用一样,都是用来进行分组和排序使用的。

此外ROW_NUMBER()函数还可以取指定顺序的数据。

SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS 总排序
FROM Scores
) t WHERE t.总排序=2;

结果如下:

SQL中的开窗函数是什么

RANK()

定义:RANK()函数,顾名思义排名函数,可以对某一个字段进行排名,这里和ROW_NUMBER()有什么不一样呢?ROW_NUMBER()是排序,当存在相同成绩的学生时,ROW_NUMBER()会依次进行排序,他们序号不相同,而Rank()则不一样。如果出现相同的,他们的排名是一样的。下面看例子:

示例

SELECT ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS [RANK],*
FROM Scores;
 
SELECT RANK() OVER (ORDER BY SCORE DESC) AS [RANK],*
FROM Scores;

结果:

SQL中的开窗函数是什么

SQL中的开窗函数是什么

其中上图是ROW_NUMBER()的结果,下图是RANK()的结果。当出现两个学生成绩相同是里面出现变化。RANK()是1-1-3-3-5-6,而ROW_NUMBER()则还是1-2-3-4-5-6,这就是RANK()和ROW_NUMBER()的区别了。

DENSE_RANK()

定义:DENSE_RANK()函数也是排名函数,和RANK()功能相似,也是对字段进行排名,那它和RANK()到底有什么不同那?特别是对于有成绩相同的情况,DENSE_RANK()排名是连续的,RANK()是跳跃的排名,一般情况下用的排名函数就是RANK() 我们看例子:

示例

SELECT 
RANK() OVER (ORDER BY SCORE DESC) AS [RANK],*
FROM Scores;
 
SELECT 
DENSE_RANK() OVER (ORDER BY SCORE DESC) AS [RANK],*
FROM Scores;

结果如下:

SQL中的开窗函数是什么

SQL中的开窗函数是什么

上面是RANK()的结果,下面是DENSE_RANK()的结果

NTILE()

定义:NTILE()函数是将有序分区中的行分发到指定数目的组中,各个组有编号,编号从1开始,就像我们说的'分区'一样 ,分为几个区,一个区会有多少个。  

SELECT *,NTILE(1) OVER (ORDER BY SCORE DESC) AS 分区后排序 FROM Scores;
SELECT *,NTILE(2) OVER (ORDER BY SCORE DESC) AS 分区后排序 FROM Scores;
SELECT *,NTILE(3) OVER (ORDER BY SCORE DESC) AS 分区后排序 FROM Scores;

结果如下:

SQL中的开窗函数是什么

SQL中的开窗函数是什么

SQL中的开窗函数是什么

就是将查询出来的记录根据NTILE函数里的参数进行平分分区。

到此,相信大家对“SQL中的开窗函数是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: SQL中的开窗函数是什么

本文链接: https://lsjlt.com/news/74168.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SQL中的开窗函数是什么
    本篇内容主要讲解“SQL中的开窗函数是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL中的开窗函数是什么”吧!OVER的定义OVER用于为行定义一个窗口...
    99+
    2024-04-02
  • SQL中的开窗函数(窗口函数)
    目录窗口函数1.1 排序窗口函数rank1.2 rank(), dense_rank(), row_number()区别1.3 排序截取数据lag(),lead(),ntile(),cume_dist()1.4 聚合函数...
    99+
    2024-04-02
  • Spark SQL中的窗口函数是什么
    在Spark SQL中,窗口函数是一种特殊的函数,可以用来在特定的窗口或分区中计算结果。窗口函数通常用于处理类似排名、聚合、排序等需...
    99+
    2024-04-09
    Spark
  • 什么是SQL窗口函数
    本篇内容主要讲解“什么是SQL窗口函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是SQL窗口函数”吧!窗口函数(Window Function) 是 SQL2003 标准中定义的一项新特...
    99+
    2023-06-15
  • SQL窗口函数是什么
    这篇文章主要介绍了SQL窗口函数是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。窗口函数形如:表达式 OVER (PARTITION BY 分组字段 ORDER BY 排...
    99+
    2023-06-29
  • MySQL8.0中的窗口函数是什么
    这篇文章给大家分享的是有关MySQL8.0中的窗口函数是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在以前的MySQL版本中是没有窗口函数的,直到MySQL8.0才引入了窗口函数。窗口函数是对查询中的每一条...
    99+
    2023-06-29
  • 一篇文章看懂SQL中的开窗函数
    目录OVER的定义OVER的语法OVER的用法OVER在聚合函数中使用的示例SUM后的开窗函数COUNT后的开窗函数OVER在排序函数中使用的示例ROW_NUMBER()RANK() DENSE_RANK()&...
    99+
    2024-04-02
  • SQL中的开窗函数详解可代替聚合函数使用
     在没学习开窗函数之前,我们都知道,用了分组之后,查询字段就只能是分组字段和聚合的字段,这带来了极大的不方便,有时我们查询时需要分组,又需要查询不分组的字段,每次都要又到子查询,这样显得sql语句...
    99+
    2024-04-02
  • rownum在sql中是什么函数
    rownum 是 sql 中的伪列函数,用于返回当前行在结果集中行号。它用于排序和编号,语法为 rownum。 rownum 在 SQL 中是什么函数? rownum 是 SQL 中一...
    99+
    2024-05-15
  • sql中聚合函数是什么
    sql 中的聚合函数是对一组行执行计算并返回单个值的函数,用于汇总和聚合数据,提取有意义的见解,包括 count()、sum()、avg()、max() 和 min()。它们通过计算所有...
    99+
    2024-05-07
    聚合函数
  • SQL Server中的聚合函数是什么
    小编给大家分享一下SQL Server中的聚合函数是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!SQL Server中的聚合函数有:1、AVG;2、COUNT;3、MAX;4、SUM...
    99+
    2024-04-02
  • sql中ceil函数的用法是什么
    在SQL中,CEIL函数用于向上取整。它接受一个数值作为参数,并返回大于或等于该数值的最小整数。例如,如果使用CEIL函数来处理以下...
    99+
    2023-10-07
    sql
  • sql中round函数的用法是什么
    在SQL中,ROUND函数用于将一个数字四舍五入到指定的小数位数。其语法如下:ROUND(number, decimal_place...
    99+
    2023-10-20
    sql
  • sql中lower函数的作用是什么
    lower函数在SQL中的作用是将字符串中的所有字符转换为小写字母。例如,在以下示例中: SELECT LOWER('He...
    99+
    2024-04-15
    sql
  • sql中sort函数的用法是什么
    在SQL中,SORT函数是一个用于对结果集进行排序的函数。它通常与ORDER BY子句一起使用,用于指定按照哪个字段或表达式进行排序...
    99+
    2024-04-02
  • sql中getdate函数的作用是什么
    GETDATE() 函数是 SQL Server 中一个内置的日期和时间函数,用于获取当前系统的日期和时间。该函数返回一个 date...
    99+
    2024-04-09
    sql
  • sql中exsit函数的作用是什么
    在SQL中,EXISTS函数用于检查子查询返回的结果集是否包含任何行。如果子查询返回至少一行,则EXISTS函数返回TRUE,否则返...
    99+
    2024-04-09
    sql
  • sql中exsit函数的用途是什么
    在 SQL 中,EXISTS 是一个用于检查子查询是否返回任何行的谓词。它的主要作用是判断指定条件下的记录是否存在,如果存在则返回真...
    99+
    2024-04-09
    sql
  • sql中lead函数的作用是什么
    在SQL中,LEAD函数用于访问指定行之后的行的数据。它可以用来获取指定行之后的下一行的数值。LEAD函数可用于在结果集中访问下一个...
    99+
    2024-04-09
    sql
  • sql中round函数的作用是什么
    SQL中的ROUND函数用于将数值四舍五入为指定的小数位数。ROUND函数接受两个参数,第一个参数是要四舍五入的数值,第二个参数是要...
    99+
    2024-04-09
    sql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作