postgresql 数据汇总
- 分组汇总
- 聚合函数
- 注意
- 总结
- 分组统计
- 总结
- 高级分组
- 总结
分组汇总
聚合函数
聚合函数(aggregate function)针对一组数据行进行运算,并且返回单个结果。PostgreSQL
支持以下常见的聚合函数:
• AVG - 计算一组值的平均值。
• COUNT - 统计一组值的数量。
• MAX - 计算一组值的最大值。
• MIN - 计算一组值的最小值。
• SUM - 计算一组值的和值。
• STRING_AGG - 连接一组字符串。
-- 部门所有员工的平均薪水、员工总数、最高薪水、最低薪水、以及薪水总计
-- 聚合函数忽略NULL数据行,count(*)除外
-- 聚合函数中的distinct会对数据去重
SELECT AVG(salary),
COUNT(distinct manager_id),
MAX(salary),
MIN(salary),
SUM(salary)
FROM employees;
-- 字符串的聚合
SELECT string_agg(first_name,';' order by first_name)
FROM employees;
注意
- 函数参数前添加 DISTINCT 关键字,可以在计算时排除重复值。
- 忽略参数中的 NULL 值
总结
分组统计
-- 分组统计
-- extract 提取
-- extract(year from hire_date) 统计入职日期按年
SELECT extract(year from hire_date) as years,count(*)
FROM employees
group by extract(year from hire_date);
-- 上述sql可以简写为如下sql
-- group by 1表示按照查询的第一列分组
SELECT extract(year from hire_date) as years,count(*)
FROM employees
group by 1;
-- 统计每年每个部门有多少人入职
SELECT extract(year from hire_date) as years,department_id,count(*)
FROM employees
group by 1,2;
总结
高级分组
create table sales(
item varchar(10),
year varchar(4),
quantity int
);
insert into sales values('apple','2018',800);
insert into sales values('apple','2018',1000);
insert into sales values('banana','2018',500);
insert into sales values('banana','2018',600);
insert into sales values('apple','2019',1200);
insert into sales values('banana','2019',1800);
-- rollup向上翻滚
select item,year,sum(quantity)
from sales
group by rollup(item,year);
-- rollup相当于group by item,year+group by item+sum(quantity)
-- rollup按照层级进行分组
-- coalesce去除非空字段
select coalesce(item,'所有产品') as "产品",coalesce(year,'所有年份')as "年份",sum(quantity)
from sales
group by rollup(item,year);