在SQLite中,窗口函数的支持是从3.25.0版本开始引入的。常见的窗口函数包括:
・ROW_NUMBER(): 为窗口中的每一行分配一个唯一的行号。
・RANK(): 计算每行在其所在分区中的排名,相同值的行会得到相同的排名,接下来的排名会跳过相同的值数量。
・DENSE_RANK(): 类似于 RANK(),但不会有跳过的排名,即相同值的行相邻时共享同一排名,下一排名紧随其后。
・LAG(): 返回指定偏移量之前的行的值。
・LEAD(): 返回指定偏移量之后的行的值。
・NTILE(): 将行分布到指定数量的桶(tiles)中。
・FIRST_VALUE(): 返回窗口内的第一行指定列的值。
・LAST_VALUE(): 返回窗口内的最后一行指定列的值。
・CUME_DIST(): 计算累计分布,即当前行位置除以分区中不大于当前行值的行数。
・PERCENT_RANK(): 计算百分比排名,类似于 CUME_DIST(),但结果在0和1之间,表示百分比形式的累积分布。
窗口函数的语法通常包含 OVER() 子句,用于定义窗口的范围和排序规则,例如:
SELECT col1, AVG(col2) OVER (PARTITION BY col3 ORDER BY col4 ROWS BETWEEN x PRECEDING AND y FOLLOWING) AS avg_col22FROM table;
上述查询会在 col3 列相同值的分区中,按 col4 排序,然后计算 col2 的滑动平均值。