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

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

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

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

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

【问题讨论】:

    标签: sql window-functions


    【解决方案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() 子句定义窗口(函数操作的行集)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多