Skip to main content

PostgreSQL 数据库

常用聚合函数与窗口函数

在 PostgreSQL 中,聚合函数(Aggregate Functions)和窗口函数(Window Functions)是非常强大的工具,用于进行复杂的数据分析和处理。这些函数使得数据查询更加灵活和高效。

聚合函数 Aggregate Functions

  • COUNT: 计算行数。
SELECT COUNT(*) FROM table_name;
  • SUM: 计算某列的总和。
SELECT SUM(column_name) FROM table_name;
  • AVG: 计算某列的平均值。
SELECT AVG(column_name) FROM table_name;
  • MAX: 找出某列的最大值。
SELECT MAX(column_name) FROM table_name;
  • MIN: 找出某列的最小值。
SELECT MIN(column_name) FROM table_name;
  • ARRAY_AGG: 将一组值合并为一个数组。
SELECT ARRAY_AGG(column_name) FROM table_name;
  • STRING_AGG: 将一组字符串值连接成一个单一的字符串。
SELECT STRING_AGG(column_name, ', ') FROM table_name;
  • STDDEV: 计算标准偏差。
SELECT STDDEV(column_name) FROM table_name;

窗口函数 Window Functions

窗口函数用于数据的分区,允许进行每个分区的聚合计算,而不是整个结果集。

  • ROW_NUMBER: 对每个分区内的行进行编号。
SELECT ROW_NUMBER() OVER (PARTITION BY column_name ORDER BY another_column) FROM table_name;
  • RANK: 对结果进行排名,相同值会有相同的排名,但会跳过随后的排名。
SELECT RANK() OVER (PARTITION BY column_name ORDER BY another_column) FROM table_name;
  • DENSE_RANK: 与 RANK 类似,但不会跳过任何排名。
SELECT DENSE_RANK() OVER (PARTITION BY column_name ORDER BY another_column) FROM table_name;
  • NTILE: 将分区的数据分成指定数量的近似大小的组。
SELECT NTILE(number_of_tiles) OVER (PARTITION BY column_name ORDER BY another_column) FROM table_name;
  • LEAD: 获取当前行的下一行的值。
SELECT LEAD(column_name) OVER (ORDER BY another_column) FROM table_name;
  • LAG: 获取当前行的上一行的值。
SELECT LAG(column_name) OVER (ORDER BY another_column) FROM table_name;
  • FIRST_VALUE: 获取分区内的第一个值。
SELECT FIRST_VALUE(column_name) OVER (PARTITION BY another_column) FROM table_name;
  • LAST_VALUE: 获取分区内的最后一个值。
SELECT LAST_VALUE(column_name) OVER (PARTITION BY another_column) FROM table_name;

这些函数使得在数据库级别上执行复杂的数据处理和分析成为可能,提高了效率并减少了将大量数据加载到应用层的需要。特别是在处理大型数据集时,这些函数非常有用。

开启插件

SELECT * FROM pg_extension;

CREATE EXTENSION vector;