SQL中的窗口是啥?

Posted

技术标签:

【中文标题】SQL中的窗口是啥?【英文标题】:What is window in SQL?SQL中的窗口是什么? 【发布时间】:2021-06-08 03:17:19 【问题描述】:

我了解窗口函数适用于称为窗口的行集,与聚合函数相比,它不会改变样本的大小。但什么是窗口?据我了解,它是一组传递给函数的行。

假设我们有一个简单的查询:

SELECT age, SUM(salary) as sum FROM workers GROUP BY age

我们可以说具有相同年龄的分组行也是一个窗口吗?因为我们对工人进行分组,并且对于每个组,我们计算他们的工资总和。Сan 我们说聚合函数也适用于窗口?

【问题讨论】:

【参考方案1】:

不,这是不正确的。 window 比聚合更通用。如果你看一下窗框的定义,我想这会很清楚:

over (partition by . . . 
      order by . . .
      range/rows . . . 
     )

当然,这些都不是必需的,但它们是给定窗口定义的一部分。

PARTITION BY 等效于GROUP BY 键,指定给定窗口仅具有具有相同键值的行。因此,说“group by 处理分区,每个分区返回一行”是相当一致的。

注意这里的一个关键点:GROUP BY 也会影响结果集中的行数,每个分区只返回一行。窗口函数对结果集没有这种影响,每行返回一个“汇总”值。

此外,窗口比PARTITION BY 更宽,可以表示一组行或相对于当前行的值。这就是ORDER BYRANGE/ROW 的用武之地。

【讨论】:

【参考方案2】:

在 SQL 中,窗口函数或分析函数是一种函数,它使用来自一个或多个行的值来为每一行返回一个值。 ... 窗口函数有一个 OVER 子句;任何没有 OVER 子句的函数都不是窗口函数,而是聚合或单行(标量)函数。

窗口函数对与当前行有某种关联的一组表行执行计算。

【讨论】:

【参考方案3】:

窗口函数对一组行进行操作,并为每一行返回一个聚合值。术语 Window 描述了函数将在其上运行的数据库中的一组行。我们使用 OVER() 子句定义窗口(函数操作的行集)。

【讨论】:

以上是关于SQL中的窗口是啥?的主要内容,如果未能解决你的问题,请参考以下文章

UIApplication 中的窗口和 AppDelegate 中的窗口是啥关系?

Objective-C Cocoa 中的关键窗口是啥?

Visual C++ 2008 Express 中的代码定义窗口是啥?

ABAP中的报出消息语句的关键字是啥?请至少说出三种消息类型.消息文本使用哪个TC

pl/sql里面命令窗口和sql窗口区别是啥?

vb窗体中的resize是啥事件?