Menu
CoddyTech

聚合函数

本课属于 Coddy SQL 学习旅程的“基础知识”单元。第 68 课,共 72 课。

使用 OVER (ORDER BY ...) 时,AVG() 或 MAX() 等聚合函数会对截至当前行的所有行进行计算,包括在 ORDER BY 值上与当前行并列的行。在 OVER 中不使用 ORDER BY 时,这些函数会对所有行进行计算,因此每一行得到的值都相同。
例如,我们可以计算截至每个期末的最高收入:

月份收入地区
440East
520East
660West
755West
861East
SELECT month, revenue, MAX(revenue) OVER (ORDER BY month ASC) as max_revenue
from table1

这会返回:

月份收入max_revenue
44040
52040
66060
75560
86161

第 4 个月和第 5 个月的最高收入是 40,第 6 个月和第 7 个月是 60,第 8 个月是 61。这是因为找到更高的新收入时,它会舍弃旧收入,并使用目前为止的最高收入。

对于 AVG() 函数,写法如下:

SELECT month, revenue, AVG(revenue) OVER (ORDER BY month ASC) as avg_revenue
from table1
月份收入avg_revenue
44040
52030
66040
75543.75
86147.2

我们还可以使用 PARTITION BY 按特定类别对计算结果分组。例如:

SELECT month, revenue, region,
MAX(revenue) OVER (PARTITION BY region ORDER BY month ASC) as max_revenue
FROM table1

会得到:

月份收入地区max_revenue
440East40
520East40
660West60
755West60
861East61

现在会分别计算每个地区的最大值。东部地区和西部地区各自独立维护运行中的最大值。

challenge icon

挑战

简单

可用的表和列:

  • books: book,page,words

对于每本书,显示书名、总页数、每页的字数,并计算:

  1. 这本书中任意一页的最大字数
  2. 整本书每页的平均字数
  3. 当前页的字数与这本书每页平均字数之间的差值

按书名和页码排序显示结果。

返回以下列:

  • book
  • page
  • words
  • max_words_in_book
  • avg_words_per_page
  • diff_from_avg

亲手试试

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: SQL 在线编辑器