filter (postgresql 支持)
1.统计行数
select 分组字段1, 分组字段2, 分组字段3,
count(*) as 统计所有满足条件数据行数,
count(*) FILTER ( WHERE 条件1 ) AS 统计满足条件1的数据行数,
count(*) FILTER ( WHERE 条件2 ) AS 统计满足条件2的数据行数,
count(*) FILTER ( WHERE 条件3 ) AS 统计满足条件3的数据行数,
count(*) FILTER ( WHERE 条件4 ) AS 统计满足条件4的数据行数,
...
from 表
group by 分组字段1, 分组字段2, 分组字段3
2.求和(类比其他计算)
select 分组字段1, 分组字段2, 分组字段3,
sum(计算字段) as 统计所有满足条件的数据计算结果,
sum(计算字段) FILTER ( WHERE 条件1 ) AS 统计满足条件1的数据计算结果,
count(计算字段) FILTER ( WHERE 条件2 ) AS 统计满足条件2的数据计算结果,
count(计算字段) FILTER ( WHERE 条件3 ) AS 统计满足条件3的数据计算结果,
count(计算字段) FILTER ( WHERE 条件4 ) AS 统计满足条件4的数据计算结果,
...
from 表
group by 分组字段1, 分组字段2, 分组字段3
case when
1. 统计行数
select 分组字段1, 分组字段2, 分组字段3,
count(*) as 统计所有数据,
sum(case when 行数统计条件1 then 1 else 0 end) professor_num,
sum(case when 行数统计条件2 then 1 else 0 end) senior_num,
sum(case when 行数统计条件3 then 1 else 0 end) engineer_num,
sum(case when 行数统计条件4 then 1 else 0 end) assistant_num,
...
from 表
group by 分组字段1, 分组字段2, 分组字段3
2.求和(类比其他计算)
select 分组字段1, 分组字段2, 分组字段3,
sum(计算字段) as 统计所有满足条件的数据计算结果,
sum(case when 条件1 then 字段1或自定义值1 else 0 end) AS 统计满足条件1的数据计算结果,
sum(case when 条件1 then 字段2或自定义值2 else 0 end) AS 统计满足条件2的数据计算结果,
sum(case when 条件1 then 字段3或自定义值3 else 0 end) AS 统计满足条件3的数据计算结果,
sum(case when 条件1 then 字段4或自定义值4 else 0 end) AS 统计满足条件4的数据计算结果,
...
from 表
group by 分组字段1, 分组字段2, 分组字段3