窗口函数(Window Functions)是一种在SQL查询中用于执行计算的高级功能,它允许你在结果集的行之间进行计算,而不仅仅是对整个结果集进行计算。窗口函数通常用于处理聚合、排名、移动平均等任务。
窗口函数的语法通常如下:
<窗口函数> OVER (
[PARTITION BY <分区列>]
[ORDER BY <排序列>]
[ROWS/RANGE <窗口范围>]
)
PARTITION BY
:将结果集分成多个分区。ORDER BY
:指定每个分区内行的排序顺序。ROWS/RANGE
:定义窗口的范围。常见的窗口函数包括:
SUM()
, AVG()
, MIN()
, MAX()
等。ROW_NUMBER()
, RANK()
, DENSE_RANK()
等。LAG()
, LEAD()
等。假设我们有一个表 sales
,包含以下列:
id
:销售记录的唯一标识。date
:销售日期。amount
:销售金额。cumulative_amount
:累计销售金额(需要更新的列)。我们可以使用窗口函数来计算 cumulative_amount
:
UPDATE sales
SET cumulative_amount = sub.total_amount
FROM (
SELECT id, SUM(amount) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS total_amount
FROM sales
) AS sub
WHERE sales.id = sub.id;
SUM(amount) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
:计算从开始到当前行的累计金额。cumulative_amount
列。通过这种方式,你可以高效地使用窗口函数来更新表中的列,而不需要复杂的子查询或临时表。
领取专属 10元无门槛券
手把手带您无忧上云