Home GaussDB的窗口函数
Post
Cancel

GaussDB的窗口函数

窗口函数(Window Function)是GaussDB这类关系型数据库中强大的工具,它能对查询结果集的一个子集(窗口)进行计算,在分析数据时极为有用。

一、基本语法

1
2
3
4
5
function_name(arg1, arg2, ...) OVER (
    [PARTITION BY partition_expression1, partition_expression2, ...]
    [ORDER BY sort_expression1 [ASC | DESC], sort_expression2 [ASC | DESC], ...]
    [frame_clause]
)
  • function_name:窗口函数的名称,像SUM、AVG、ROW_NUMBER等。
  • OVER:这是窗口函数的标志,用于定义窗口。
  • PARTITION BY:把结果集划分成多个分区,窗口函数会在每个分区内独立计算。
  • ORDER BY:在分区内对数据进行排序。
  • frame_clause:可选参数,进一步限定窗口内的行范围。

二、窗口函数类型及示例

2.1 排名函数

ROW_NUMBER():为结果集中的每一行分配一个唯一的行号。

1
2
3
4
5
6
SELECT 
    id, 
    name, 
    score,
    ROW_NUMBER() OVER (ORDER BY score DESC) as row_num
FROM students;

上述代码为students表中的每一行按score降序分配一个唯一的行号。

2.2 聚合函数

SUM():计算分区内某列的总和。

1
2
3
4
5
6
SELECT 
    department, 
    employee_name, 
    salary,
    SUM(salary) OVER (PARTITION BY department) as total_department_salary
FROM employees;

上述代码按department对employees表进行分区,并计算每个部门的工资总和。

2.3 PARTITION BY

PARTITION BY是窗口函数中一个关键的子句,它会把结果集分割成不同的组,每个组就是一个分区。窗口函数会对每个分区内的数据分别进行计算,而不是对整个结果集进行统一计算。这有助于你在每个分区内进行特定的统计或分析。

1
2
3
4
5
6
7
SELECT 
    column1, 
    column2, 
    -- 使用窗口函数,按照column1进行分区
    window_function(column3) OVER (PARTITION BY column1 ORDER BY column2) as result
FROM 
    your_table;

在上述语法中,PARTITION BY column1把结果集按照column1的值进行分区,ORDER BY column2则在每个分区内对数据按照column2进行排序,window_function(column3)会在每个分区内对column3 执行相应的窗口函数计算。

This post is licensed under CC BY 4.0 by the author.

GaussDB的with子句

GitHub开源软件