SQL 中的 window 是什么?
What is window in SQL?
我知道 window 函数使用一组称为 window 的行,与聚合函数相反,它不会改变样本的大小。但是 window 是什么?据我了解,它是一组传递给函数的行。
假设我们有一个简单的查询:
SELECT age, SUM(salary) as sum FROM workers GROUP BY age
我们可以声明具有相同年龄的分组行也是 window 吗?因为我们将工人分组,并且对于每个组,我们计算他们的工资总和。我们说聚合函数也适用于 window?
在SQL中,window函数或分析函数是使用一行或多行中的值来return每一行的值的函数。 ... Window 函数有一个 OVER 子句;任何没有 OVER 子句的函数都不是 window 函数,而是聚合函数或单行(标量)函数。
window 函数对一组 table 行执行计算,这些行与当前行有某种关联。
Window 函数对一组行进行操作,return 每行的单个聚合值。术语 Window 描述了函数将在其上运行的数据库中的行集。我们使用 OVER() 子句定义 Window(函数操作的行集)。
不,这不正确。 window 比聚合更通用。如果您查看 window 框架的定义,我认为这会很清楚:
over (partition by . . .
order by . . .
range/rows . . .
)
当然,这些并不是全部都需要,但它们是给定window.
定义的一部分
PARTITION BY
是 等同于 GROUP BY
键,指定给定的 window 仅包含具有相同键值的行。因此,说“group by
处理 分区 ,每个分区返回一行”是非常一致的。
注意这里的一个关键点:GROUP BY
也影响结果集中的行数,每个分区只返回一行。 Window 函数对结果集没有这种影响,每行返回一个“汇总”值。
此外,window 比 PARTITION BY
更宽,可以表示一组行或相对于当前行的值。这就是 ORDER BY
和 RANGE
/ROW
进来的地方。
我知道 window 函数使用一组称为 window 的行,与聚合函数相反,它不会改变样本的大小。但是 window 是什么?据我了解,它是一组传递给函数的行。
假设我们有一个简单的查询:
SELECT age, SUM(salary) as sum FROM workers GROUP BY age
我们可以声明具有相同年龄的分组行也是 window 吗?因为我们将工人分组,并且对于每个组,我们计算他们的工资总和。我们说聚合函数也适用于 window?
在SQL中,window函数或分析函数是使用一行或多行中的值来return每一行的值的函数。 ... Window 函数有一个 OVER 子句;任何没有 OVER 子句的函数都不是 window 函数,而是聚合函数或单行(标量)函数。
window 函数对一组 table 行执行计算,这些行与当前行有某种关联。
Window 函数对一组行进行操作,return 每行的单个聚合值。术语 Window 描述了函数将在其上运行的数据库中的行集。我们使用 OVER() 子句定义 Window(函数操作的行集)。
不,这不正确。 window 比聚合更通用。如果您查看 window 框架的定义,我认为这会很清楚:
over (partition by . . .
order by . . .
range/rows . . .
)
当然,这些并不是全部都需要,但它们是给定window.
定义的一部分 PARTITION BY
是 等同于 GROUP BY
键,指定给定的 window 仅包含具有相同键值的行。因此,说“group by
处理 分区 ,每个分区返回一行”是非常一致的。
注意这里的一个关键点:GROUP BY
也影响结果集中的行数,每个分区只返回一行。 Window 函数对结果集没有这种影响,每行返回一个“汇总”值。
此外,window 比 PARTITION BY
更宽,可以表示一组行或相对于当前行的值。这就是 ORDER BY
和 RANGE
/ROW
进来的地方。