: 标签 PostgreSQL , 聚合 , filter , order , within group 背景 PostgreSQL的分析功能还是比较强大的,例如支持多维分析,支持4大类聚合,支持窗口查询,支持递归查询等。
标签
PostgreSQL , 聚合 , filter , order , within group
背景
PostgreSQL的分析功能还是比较强大的,例如支持多维分析,支持4大类聚合,支持窗口查询,支持递归查询等。
4大类聚合的用法请参考
《PostgreSQL aggregate function 1 : General-Purpose Aggregate Functions》
《PostgreSQL aggregate function 2 : Aggregate Functions for Statistics》
《PostgreSQL aggregate function 3 : Aggregate Functions for Ordered-Set》
《PostgreSQL aggregate function 4 : Hypothetical-Set Aggregate Functions》
多维分析请参考
《Greenplum 最佳实践 - 多维分析的使用(CUBE, ROLLUP, GROUPING SETS in GreenPlum and Oracle)》
《PostgreSQL 9.5 new feature - Support GROUPING SETS, CUBE and ROLLUP.》
窗口查询请参考
《时序数据合并场景加速分析和实现 - 复合索引,窗口分组查询加速,变态递归加速》
《快速入门PostgreSQL应用开发与管理 - 4 高级SQL用法》
递归查询请参考
《快速入门PostgreSQL应用开发与管理 - 3 访问数据》
本文主要介绍一下聚合表达式的高级用法
aggregate_name (expression [ , ... ] [ order_by_clause ] ) [ FILTER ( WHERE filter_clause ) ]
aggregate_name (ALL expression [ , ... ] [ order_by_clause ] ) [ FILTER ( WHERE filter_clause ) ]
aggregate_name (DISTINCT expression [ , ... ] [ order_by_clause ] ) [ FILTER ( WHERE filter_clause ) ]
aggregate_name ( * ) [ FILTER ( WHERE filter_clause ) ]
aggregate_name ( [ expression [ , ... ] ] ) WITHIN GROUP ( order_by_clause ) [ FILTER ( WHERE filter_clause ) ]
例子
1. 我们在分组后,需要查出分组中复合条件的count,以及分组的count。
postgres=# create table test(id int, c1 int);
CREATE TABLE
postgres=# insert into test select generate_series(1,10000), random()*10;
INSERT 0 10000
postgres=# select * from test limit 10;
id | c1
----+----
1 | 10
2 | 4
3 | 6
4 | 1
5 | 4
6 | 9
7 | 9
8 | 7
9 | 5
10 | 4
(10 rows)
postgres=# select count(*), count(*) filter (where id<1000) from test group by c1;
count | count
-------+-------
1059 | 118
998 | 109
999 | 101
1010 | 95
468 | 48
544 | 43
964 | 107
956 | 103
1021 | 87
977 | 101
1004 | 87
(11 rows)
2. 我们需要按顺序,将多条记录,聚合为一个字符串或数组,同样也可以加filter,只聚合复合条件的记录
postgres=# select string_agg(id::text, '-' order by id) filter (where id<100) from test group by c1;
string_agg
-------------------------------------------
35-65-74-97
4-12-19-31-36-40-85-89-90-98-99
17-18-22-42-43-44-58-59-64-70-75-83-84
11-14-15-16-21-30-41-54-62-67-73-80-81-94
2-5-10-51-79-93-96
9-26-45-46-47-61
3-27-28-37-48-55-56-68-69-77-92
8-20-24-33-34-49-50-60-63-66-78-91
25-39-53-57-71-76-82-87-95
6-7-29-32-38-72-86-88
1-13-23-52
(11 rows)
3. 我们需要去每个分组,某个字段中值
postgres=# select percentile_cont(0.5) within group (order by id) from test group by c1;
percentile_cont
-----------------
4911.5
5210
4698
4699.5
4955
5061.5
5115
5176
4897.5
5087
4973
(11 rows)
4. 去过滤条件后的中值
postgres=# select percentile_cont(0.5) within group (order by id) filter (where id<100) from test group by c1;
percentile_cont
-----------------
69.5
40
58
47.5
51
45.5
55
49.5
71
35
18
(11 rows)
小结
PostgreSQL 的分析方法很全面,建议用户可以多了解一下我在开始时给出的链接,帮助提高生产力。
参考
https://www.postgresql.org/docs/9.6/static/sql-expressions.html#SYNTAX-AGGREGATES
相关推荐
PostgreSQL 正则表达式 常用函数的总结 对那些需要进行复杂数据处理的程序来说,正则表达式无疑是一个非常有用的工具。本文重点在于阐述 PostgreSQL 的一些常用正则表达式函数以及源码中的一些函数。 正则相关部分的...
在SQL中,分组查询是通过`GROUP BY`子句来实现的,它可以将数据按照一个或多个列的值进行分组,通常结合聚合函数一起使用,以便对每个分组执行计算。 1. SQL中的分组查询 在SQL中,使用`GROUP BY`语句进行分组操作...
根据给定文件的信息,我们可以提炼出关于 PostgreSQL 注入与过滤技术的相关知识点。 ### PostgreSQL 注入与过滤技术 #### 一、引言 根据 WhiteHat 的网站安全统计报告(2009 年发布,可访问 ...
Postgresql 支持 GROUP BY 语句,使用 GROUP BY 语句可以对表中的数据进行分组。例如: ```sql SELECT * FROM emp GROUP BY dept; ``` Rollup 语句 Postgresql 支持 ROLLUP 语句,使用 ROLLUP 语句可以对表中的...
- ORDER BY、GROUP BY、HAVING子句的使用方法。 - 动态游标、连接操作、子查询的处理方式。 - UNION和UNION ALL的用法。 - 动态SQL的实现。 - 条件处理、打印输出消息、隐式类型转换等内容。 #### 2. 转换参考 ###...
在使用PostgreSQL 9.6时,你可以利用其丰富的功能,如窗口函数、递归公共表表达式、JSONB数据类型和多版本并发控制(MVCC),以构建高效、可靠和可扩展的数据库解决方案。同时,PostgreSQL还拥有活跃的社区支持,...
PostgreSQL 12.2 安装与使用 PostgreSQL 是一种功能强大且广泛应用的开源关系数据库管理系统,本文档旨在为初学者提供一个详细的 PostgreSQL 12.2 安装与使用指南。 创建用户与环境配置 在安装 PostgreSQL 之前,...
PostgreSQL中文学习手册 PostgreSQL PostgreSQL PostgreSQL学习手册 学习手册 学习手册 (数据表 数据表 ) 4 一、表的定义: 一、表的定义: 一、表的定义: . 4 PostgreSQL PostgreSQL PostgreSQL学习手册 学习手册...
从简单的SELECT查询,到WHERE子句筛选数据,再到ORDER BY进行排序,OFFSET和FETCH实现分页,以及GROUP BY和聚合函数进行数据汇总,这一系列章节帮助读者掌握SQL核心功能。此外,连接查询(JOIN)章节介绍了多种连接...
1. **并行查询优化**:PostgreSQL 10 引入了并行查询功能,使得大型表的扫描和聚合操作可以在多核处理器上并行执行,大大提高了处理大数据集的速度。 2. **分区表**:新版本支持范围和列表分区,允许用户根据特定...
PostgreSQL修炼之道:从小工到专家 PostgreSQL是一种功能强大且广泛应用的开源关系型数据库管理系统,本书《PostgreSQL修炼之道:从小工到专家》旨在帮助读者深入理解PostgreSQL的核心原理和最佳实践,从而提升...
PostgreSQL(postgresql-14.1.tar.bz2) PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。...
PostgreSQL(postgresql-14.1.tar.gz) PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES...
A Tour of PostgreSQL Internals.pdf Inside the PostgreSQL Query Optimizer.pdf Inside the PostgreSQL Shared Buffer Cache.pdf Internals Of PostgreSQL Wal.pdf PostgreSQL Internals Through Pictures.pdf ...
PostgreSQL(postgresql-13.5.tar.bz2) PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。...
PostgreSQL 9.6 RPM包是一款专为Linux系统设计的数据库管理系统安装包,采用RPM(Red Hat Package Manager)格式,适用于基于RPM的Linux发行版,如CentOS、Fedora、RHEL等。PostgreSQL是一款强大的开源关系型数据库...
PostgreSQL 8.2.3支持标准SQL,并扩展了多种高级特性,如窗口函数、递归公共表表达式(CTEs)、存储过程等。API手册会详细解释如何在程序中正确使用这些SQL语句。 三、C语言API PostgreSQL的核心API主要是用C语言...
这些内容为读者理解PostgreSQL的背景和使用方法提供了入口。 在教程部分,手册介绍了如何开始使用PostgreSQL。包括如何进行安装、理解数据库架构基础、创建数据库、以及如何访问数据库。紧接着,手册介绍了SQL语言...
使用 Matlab 连接 PostgreSQL 数据库需要使用 database 函数。该函数的语法为:connection = database(database_name, database_user, user_password, 'Vendor', 'PostGreSQL');其中,database_name 是数据库的名称...