窗口函数的关键组件之一是 OVER 子句。 该子句在应用关联的开窗函数前确定行集的分区和排序。 也就是说,OVER 子句定义查询结果集内的窗口或用户指定的行集。 然后,开窗函数将计算窗口中每一行的值。 您可以将 OVER 子句与函数一起使用,以便计算各种聚合值,例如移动平均值、累积聚合、运行总计或每组结果的前 N 个结果。
- 打开 Synapse Studio (https://web.azuresynapse.net/)。
- 选择“开发”中心。
- 在“开发”菜单中选择“+”按钮 (1) 并选择上下文菜单中的“SQL 脚本”(2)。
- 在工具栏菜单中连接到“SQL 池”数据库以执行该查询。
- 将查询窗口中的脚本替换为以下语句,以便将 OVER 子句与 wwi_security.Sale 表中的数据结合使用:
- 在工具栏菜单中选择“运行”以执行 SQL 命令。
将 PARTITION BY 与 OVER 子句 (1) 结合使用时,我们会将查询结果集划分为多个分区。 开窗函数分别应用于每个分区,并为每个分区重新启动计算。
我们执行的脚本将 OVER 子句与 ROW_NUMBER 函数 (1) 结合使用来显示分区中每一行的行号。 本例中的分区是“区域”列。 在 OVER 子句中指定的 ORDER BY 子句 (2) 按“数量”列对每个分区中的行进行排序。 SELECT 语句中的 ORDER BY 子句确定按其返回整个查询结果集的顺序。
在结果视图中向下滚动,直到行号计数 (3) 以不同的区域 (4) 开头。 由于分区设置为“区域”,因此在区域发生更改时 ROW_NUMBER 会进行重置。 实质上,我们已按区域分区,并且具有由该区域中的行数标识的结果集。
现在可以展开使用 OVER 子句的查询,通过窗口使用聚合函数。
- 将查询窗口中的脚本替换为以下内容以添加聚合函数:
- 在工具栏菜单中选择“运行”以执行 SQL 命令。
在查询中,我们添加了 SUM、AVG、COUNT、MIN 和 MAX 聚合函数。 使用 OVER 子句比使用子查询的效率高。
分析函数基于一组行计算聚合值。 但是,与聚合函数不同,分析函数可能针对每个组返回多行。 可以使用分析函数来计算移动平均线、运行总计、百分比或一个组内的前 N 个结果。
Tailwind Traders 已从在线商店导入书籍销售数据,并希望按类别计算书籍下载百分比。
为此,你决定生成使用 PERCENTILE_CONT 和 PERCENTILE_DISC 函数的窗口函数。
- 将查询窗口中的脚本替换为以下内容以添加聚合函数:
- 在工具栏菜单中选择“运行”以执行 SQL 命令。
在此查询中,我们使用 PERCENTILE_CONT (1) 和 PERCENTILE_DISC (2) 来查找每种书籍类别的下载量中值。 这些函数可能返回不同的值。 PERCENTILE_CONT 内插适当的值,它在数据集中可能存在,也可能不存在,而 PERCENTILE_DISC 始终从数据集中返回实际值。 具体而言,PERCENTILE_DISC 计算整个行集内或行集的非重复分区内已排序值的特定百分位数。
传递给百分位数函数的 0.5 值(1 和 2)计算下载量的第 50 百分位数或中值。
WITHIN GROUP 表达式 (3) 指定了一组值,用于排序和计算百分位数。 只允许使用一个 ORDER BY 表达式,并且默认排序顺序为升序。
OVER 子句 (4) 将 FROM 子句的结果集划分为多个分区,本例中的分区为 Category。 百分位数函数应用于这些分区。
- 在查询窗口中,将脚本替换为以下内容,以使用 LAG 分析函数:
Tailwind Traders 想比较一种产品在一段时间内每小时的销售总额,并显示值的差异。
为此,你要使用 LAG 分析函数。 此函数访问相同结果集中先前行的数据,而不使用自联接。 LAG 以当前行之前的给定物理偏移量来提供对行的访问。 我们使用此分析函数来将当前行中的值与先前行中的值进行比较。
- 在工具栏菜单中选择“运行”以执行 SQL 命令。
在这个查询中,我们使用 LAG 函数 (1) 返回特定产品在高峰销售时间(8 点到 20 点)的销量差异 (2)。 我们还计算从一个行到下一行 (3) 的销量差额。 请注意,因为第一行没有提供滞后值,所以将返回默认值零 (0)。
使用 ROWS 和 RANGE 子句,可通过在分区中指定起点和终点进一步限制分区中的行。 这是通过按照逻辑关联或物理关联对当前行指定某一范围的行实现的。 物理关联通过使用 ROWS 子句实现。
Tailwind Traders 希望按国家/地区分类找到下载量最低的书籍,同时按升序显示每个国家/地区中每本书的总下载次数。
为了实现这一点,可以结合使用 ROWS 和 UNBOUNDED PRECEDING 来限制Country 分区中的行,指定窗口从分区的第一行开始。
- 将查询窗口中的脚本替换为以下内容以添加聚合函数:
- 在工具栏菜单中选择“运行”以执行 SQL 命令。
在此查询中,我们使用 FIRST_VALUE 分析函数检索下载量最低的书名,如 Country 分区 (1) 上的 ROWS UNBOUNDED PRECEDING 子句所示。 UNBOUNDED PRECEDING 选项将窗口设置为从分区的第一行开始,同时为我们提供分区中国家/地区的下载量最低的书名。
在结果集中,可以滚动查看按国家/地区列出的书籍,并按下载次数的升序排序。
到此这篇max开窗函数(max窗户)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/haskellbc/66962.html