sql同一张表统计数据生成多个统计列

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

猜你喜欢

转载自blog.csdn.net/huofuman960209/article/details/118872921