美文网首页
第十五章 SQL窗口函数概述(二)

第十五章 SQL窗口函数概述(二)

作者: Cache技术分享 | 来源:发表于2022-01-06 09:21 被阅读0次

第十五章 SQL窗口函数概述(二)

ROW子句

ROW子句可以与FIRST_VALUE(字段)和SUM(字段)窗口函数一起使用。
可以为其他windows函数指定它,但不执行任何操作(有或没有ROWS子句的结果相同)。

ROWS子句有两种语法形式:

ROWS framestart
ROWS BETWEEN framestart AND frameend

Framestartframeend有五个可能的值:

UNBOUNDED PRECEDING                    /* 从当前分区的开头开始 */
offset PRECEDING   /* 开始偏移当前行之前的行数 */
CURRENT ROW                                      /* 从当前行开始 */
offset FOLLOWING  /* 继续偏移当前行后面的行数 */
UNBOUNDED FOLLOWING                  /* 继续到当前分区的末尾 */

ROWS子句语法可以在两个方向上指定一个范围。
例如,在无界前面和1后面之间的行以及在1后面和无界前面之间的行是完全相等的。

ROWS框架的开始语法默认为CURRENT ROW作为范围的第二个未指定的边界。
因此,以下是等价的:

   
ROWS UNBOUNDED PRECEDING ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
ROWS 1 PRECEDING ROWS BETWEEN 1 PRECEDING AND CURRENT ROW
ROWS CURRENT ROW ROWS BETWEEN CURRENT ROW AND CURRENT ROW
ROWS 1 FOLLOWING ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING
ROWS UNBOUNDED FOLLOWING ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING

如果没有指定ROWS子句,则默认为在无界的前一行和当前行之间的行数。

ROW子句示例

下面的查询返回包含大量“噪声noise”(随机变量)的分数。ROWS子句用于“平滑smooth”这些变化,方法是按排序顺序将每个分数与其前一个分数和紧随其后的分数相加,然后除以3,得到滚动平均分数:

SELECT Item,Score,SUM(Score)
  OVER (ORDER BY Score ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)/3
  AS CohortScore FROM Sample.TestScores

操作为:(PrecedingScore+CurrentScore+FollowingScore)/3,注意底部和顶部的CohortScore值不准确,因为它们是将0加到两个计分值上,然后除以3(0+CurrentScore+FollowingScore)/3(PrecedingScore+CurrentScore+0)/3

使用窗口函数

窗口函数可用于:

  • SELECT list as a listed select-item.

窗口函数不能嵌入到子查询或选择项列表中的聚合函数中。

  • ORDER BY clause.

窗口函数不能在and ONWHERE、GROUP BYHAVING子句中使用。
尝试这样做会导致SQLCODE -367错误。

列名和别名

默认情况下,分配给窗口函数结果的列名是Window_n,其中n号后缀是列序号,正如在SELECT列表中指定的那样。
因此,下面的例子创建了列名Window_3Window_6:

SELECT Name,Home_State,ROW_NUMBER() OVER (PARTITION BY Home_State),Age,AVG(Age),ROW_NUMBER() OVER (ORDER BY Age)
FROM Sample.Person
image.png

如果要指定另一个列名(列别名),请使用AS关键字:

SELECT Name,State,ROW_NUMBER() OVER (PARTITION BY State) AS StateRow,Age
FROM Sample.Person
image.png

可以使用列别名在ORDER BY子句中指定一个窗口字段:

SELECT Name,State,ROW_NUMBER() OVER (PARTITION BY State) AS StateRow,Age
FROM Sample.Person
ORDER BY StateRow
image.png

不能在ORDER BY子句中使用默认的列名(如Window_3)。

ORDER BY

因为在窗口函数求值之后,ORDER BY子句应用于查询结果集,所以ORDER BY不会影响选择项窗口函数分配的值。

相关文章

  • 第十五章 SQL窗口函数概述(二)

    第十五章 SQL窗口函数概述(二) ROW子句 ROW子句可以与FIRST_VALUE(字段)和SUM(字段)窗口...

  • 第十四章 SQL窗口函数概述(一)

    第十四章 SQL窗口函数概述(一) 指定用于计算聚合和排名的每行“窗口框架”的函数。 窗口函数和聚合函数 在应用W...

  • hive窗口函数盘点

    在支持窗口函数里的sql里,善用窗口函数,能降低sql编写复杂度并提高sql执行效率。 窗口函数 function...

  • Hive SQL 窗口函数

    本文首发:大数据每日哔哔-Hive SQL 窗口函数 Hive 的窗口函数 在 SQL 中有一类函数叫做聚合函数,...

  • 窗口函数(OVER 子句)

    窗口函数简介 数据准备 问题描述 解答 窗口函数简介 窗口函数是 SQL 中一类特别的函数。 和聚合函数相似,窗口...

  • Mysql窗口函数

    参考: MySQL 8.0窗口函数:用非常规思维简易实现SQL需求 数分面试-SQL篇 一、mysql窗口函数简介...

  • SQL窗口函数

    SQL窗口函数 partition by order by rank, dense_rank, row_numbe...

  • 《SQL基础教程》学习笔记Ch8

    8 SQL高级处理 8-1窗口函数 8-1-1什么是窗口函数 窗口函数也称为 OLAP 函数。OLAP是OnLin...

  • MICK-SQL基础教程(第二版) 第八章 SQL高级处理

    第八章 SQL高级处理 窗口函数 窗口函数也称为 OLAP函数 。OLAP 是 OnLine Analytical...

  • 单行函数

    一、SQL函数概述 SQL函数分类 单行函数多行函数 单行函数语法 语法:函数名[(参数1,参数2,….)]注意:...

网友评论

      本文标题:第十五章 SQL窗口函数概述(二)

      本文链接:https://www.haomeiwen.com/subject/gdplcrtx.html