Oracle统计每个公司每年的员工信息——另类“两次分组”
1.前言昨天遇到一个 2.需求
3.前导知识3.1 case 一般语句
CASE SELECTOR
WHEN EXPRESSION_1 THEN STATEMENT_1;
[WHEN EXPRESSION_2 THEN STATEMENT_2;]
[...]
[ELSE STATEMENT_N+1 ;]
END CASE;
CASE v_element
WHEN xx THEN yy;
WHEN xxx THEN yyy;
ELSE yyyy;
END CASE;
3.2搜索式 case 语句CASE
WHEN SEARCH_CONDITION_1 THEN STATEMENT_1;
[WHEN SEARCH_CONDITION_1 THEN STATEMENT_2;]
[...]
[ELSE STATEMENT_N+1 ;]
END CASE;
CASE
WHEN v_element=xx THEN yy;
WHEN v_element=xxx THEN yyy;
ELSE yyyy;
END CASE;
4.问题分析
4.1正常“两次分组”
统计出来的数据结果是这样的: 4.2“曲线两次分组”
5.问题解决5.1环境介绍
5.2建表create table gsygxx ( gsdm VARCHAR2(16),tjsj VARCHAR2(64),xm VARCHAR2(32),xb VARCHAR2(8),nl NUMBER )
5.3Excel数据导入5.4正常“两次分组”源代码
select gsdm 公司代码,tjsj 统计时间,count(*) 总人数,avg (nl) 平均年龄,count(CASE WHEN xb='女' THEN 1 ELSE NULL END) 女,count(CASE WHEN xb='男' THEN 1 ELSE NULL END) 男 from gsygxx group by gsdm,tjsj order by gsdm,tjsj;
5.5“曲线两次分组”源代码
select gsdm 公司代码,avg (CASE WHEN tjsj = '2008-12-31' THEN nl ELSE NULL END) 平均年龄_2008,count (CASE WHEN tjsj = '2008-12-31' THEN 1 ELSE NULL END) 总人数_2008,count (CASE WHEN tjsj = '2008-12-31' and xb='男' THEN 1 ELSE NULL END) 总人数_2008_男,count (CASE WHEN tjsj = '2008-12-31' and xb='女' THEN 1 ELSE NULL END) 总人数_2008_女,avg (CASE WHEN tjsj = '2009-12-31' THEN nl ELSE NULL END) 平均年龄_2009,count (CASE WHEN tjsj = '2009-12-31' THEN 1 ELSE NULL END) 总人数_2009,count (CASE WHEN tjsj = '2009-12-31' and xb='男' THEN 1 ELSE NULL END) 总人数_2009_男,count (CASE WHEN tjsj = '2009-12-31' and xb='女' THEN 1 ELSE NULL END) 总人数_2009_女,avg (CASE WHEN tjsj = '2010-12-31' THEN nl ELSE NULL END) 平均年龄_2010,count (CASE WHEN tjsj = '2010-12-31' THEN 1 ELSE NULL END) 总人数_2010,count (CASE WHEN tjsj = '2010-12-31' and xb='男' THEN 1 ELSE NULL END) 总人数_2010_男,count (CASE WHEN tjsj = '2010-12-31' and xb='女' THEN 1 ELSE NULL END) 总人数_2010_女,avg (CASE WHEN tjsj = '2011-12-31' THEN nl ELSE NULL END) 平均年龄_2011,count (CASE WHEN tjsj = '2011-12-31' THEN 1 ELSE NULL END) 总人数_2011,count (CASE WHEN tjsj = '2011-12-31' and xb='男' THEN 1 ELSE NULL END) 总人数_2011_男,count (CASE WHEN tjsj = '2011-12-31' and xb='女' THEN 1 ELSE NULL END) 总人数_2011_女,avg (CASE WHEN tjsj = '2012-12-31' THEN nl ELSE NULL END) 平均年龄_2012,count (CASE WHEN tjsj = '2012-12-31' THEN 1 ELSE NULL END) 总人数_2012,count (CASE WHEN tjsj = '2012-12-31' and xb='男' THEN 1 ELSE NULL END) 总人数_2012_男,count (CASE WHEN tjsj = '2012-12-31' and xb='女' THEN 1 ELSE NULL END) 总人数_2012_女,avg (CASE WHEN tjsj = '2013-12-31' THEN nl ELSE NULL END) 平均年龄_2013,count (CASE WHEN tjsj = '2013-12-31' THEN 1 ELSE NULL END) 总人数_2013,count (CASE WHEN tjsj = '2013-12-31' and xb='男' THEN 1 ELSE NULL END) 总人数_2013_男,count (CASE WHEN tjsj = '2013-12-31' and xb='女' THEN 1 ELSE NULL END) 总人数_2013_女,avg (CASE WHEN tjsj = '2014-12-31' THEN nl ELSE NULL END) 平均年龄_2014,count (CASE WHEN tjsj = '2014-12-31' THEN 1 ELSE NULL END) 总人数_2014,count (CASE WHEN tjsj = '2014-12-31' and xb='男' THEN 1 ELSE NULL END) 总人数_2014_男,count (CASE WHEN tjsj = '2014-12-31' and xb='女' THEN 1 ELSE NULL END) 总人数_2014_女,avg (CASE WHEN tjsj = '2015-12-31' THEN nl ELSE NULL END) 平均年龄_2015,count (CASE WHEN tjsj = '2015-12-31' THEN 1 ELSE NULL END) 总人数_2015,count (CASE WHEN tjsj = '2015-12-31' and xb='男' THEN 1 ELSE NULL END) 总人数_2015_男,count (CASE WHEN tjsj = '2015-12-31' and xb='女' THEN 1 ELSE NULL END) 总人数_2015_女,avg (CASE WHEN tjsj = '2016-12-31' THEN nl ELSE NULL END) 平均年龄_2016,count (CASE WHEN tjsj = '2016-12-31' THEN 1 ELSE NULL END) 总人数_2016,count (CASE WHEN tjsj = '2016-12-31' and xb='男' THEN 1 ELSE NULL END) 总人数_2016_男,count (CASE WHEN tjsj = '2016-12-31' and xb='女' THEN 1 ELSE NULL END) 总人数_2016_女 from gsygxx group by gsdm order by gsdm;
5.5拓展根据上面的分析和源代码,我们不难对其进行稍稍拓展,可以统计
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |