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 BY
和RANGE
/ROW
的用武之地。
【讨论】:
【参考方案2】:在 SQL 中,窗口函数或分析函数是一种函数,它使用来自一个或多个行的值来为每一行返回一个值。 ... 窗口函数有一个 OVER 子句;任何没有 OVER 子句的函数都不是窗口函数,而是聚合或单行(标量)函数。
窗口函数对与当前行有某种关联的一组表行执行计算。
【讨论】:
【参考方案3】:窗口函数对一组行进行操作,并为每一行返回一个聚合值。术语 Window 描述了函数将在其上运行的数据库中的一组行。我们使用 OVER() 子句定义窗口(函数操作的行集)。
【讨论】:
以上是关于SQL中的窗口是啥?的主要内容,如果未能解决你的问题,请参考以下文章
UIApplication 中的窗口和 AppDelegate 中的窗口是啥关系?
Visual C++ 2008 Express 中的代码定义窗口是啥?