PostgreSQL 聚集函数

0.最近就是到处填坑

pgSQL 中文文档 聚集函数

1.聚集函数也叫聚合函数

聚合操作之高效这里就不多谈了。
其特点在 窗口函数的文章中 做了些比较,所以…也不多谈了。
结合文档来说,聚集函数有一些巧思的,剩下的基本都是些较为专业的科学统计api,带过了。(有点“随笔”的感觉了…)

2. 一些场景

having 中使用聚合函数作为过滤条件 较where子句的逐行过滤来说,效率更优

grouping sets、cube、rollup 用作分组集(分组聚集),也就是将分组字段以组合的方式罗列出来
	cube、rollop是grouping sets的两种分组方式的简洁写法(不知道咋说了,建议回归原文细看...)
		cube:给定分组的随机组合
		rollup:给定排序的分组的梯形分布
	groupping 和 传统的group不同的是,多分组下的表现形式不同:
		group是在上一次分组的各个组内进行下一轮分组
		grouping 的下一次分组使用的并不是前一次分组的结果,而是原来未分过组的原始表 -> 两次分组互不印象 -> 分组后的结果,给人一种“错开”显示的感觉

借助array_agg(exp)、jsonb_agg(exp)等api可将多行的列聚集成数组、json甚至是xml

count(distinct 列)可以实现分组内统计不重复值
count(1) 中的'1'表统计结果集中的第一列,这比count(*)效率更好
聚合函数不一样要使用group by,如果使用了group by需要保证值不能为N/A(不是null,相当于是查询空表的意思)=>这时候,考虑去掉group by || 套一层"父查询"(并使用case when is null)

pgsql的group by后不仅限于列名,亦支持表达式。比如:select ... from ... where ... group by col < 10 ,col >= 10 and col <50,col >=50 
	根据表达式分组下,无法返回任意的原有列,除了使用聚合函数。-> 因此,我们可以使用order by 聚合函数 来确定返回结果的排序

你可能感兴趣的:(SQL,postgresql,数据库)