Oracle统计每个公司每年的员工信息——另类“两次分组”

本文记录了一次使用Oracle数据库统计3000多家公司2008年至2016年员工信息的实践,包括员工总数、男女员工数及平均年龄。通过案例分析了正常两次分组和曲线两次分组的方法,并提供了SQL语句实现。
摘要由CSDN通过智能技术生成

1.前言

昨天遇到一个统计的问题,数据大概14w条左右,在Excel文件中,原本打算用之前学的python练练手,后来时间紧,就直接导到Oracle数据库里统计了,解决的过程挺有意思,特此记录如下:

2.需求

现有3000多家公司2008年-2016年 员工的信息;约有14w条数据;存储在 Excel文件中;

为保护隐私此处数据为模拟数据

要求统计:
1.每个公司每年的员工数
2.每个公司每年的男、女员工数
3.每个公司每年的员工的平均年龄

sql语句在最后,如急需可跳至末尾
sql语句在最后,如急需可跳至末尾
sql语句在最后,如急需可跳至末尾

3.前导知识

3.1 case 一般语句

  • case 语句带有选择效果知返回第一个条件满足要求的语句,即语句一语句二都的判断都为 true ,返回排在前面的。
  • case 的语法根据放置的位置不同而不同。
CASE    SELECTOR
    WHEN   EXPRESSION_1 THEN STATEMENT_1;
    [WHEN EXPRESSION_2 THEN STATEMENT_2;]
    [...]
    [ELSE STATEMENT_N+1 ;]
END CASE;
  • 注意 在then 后面需要 ; 分号,而且结束的时候 是 END CASE ;
CASE v_element
    WHEN  xx  THEN yy;
    WHEN  xxx THEN  yyy;
    ELSE  yyyy;
END CASE;

当v_element 等于 xx 时,执行 yy 语句,如果很长可以 前后加 begin 和 end,判断的条件是 v_element =xx ,xx是 具体值。

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“曲线两次分组”

如果要求一个公司的信息统计为一条数据

此时只能首先按照公司分组,分组之后,组内再利用case 语句“曲线实现分组”的效果

5.问题解决

5.1环境介绍

1.Oracle 11g 64位
2.PLSQL 11.0.3.1700
3.Microsoft Office 2013

5.2建表

create table gsygxx
(
  gsdm VARCHAR2(16),
  tjsj VARCHAR2(64),
  xm   VARCHAR2(32),
  xb   VARCHAR2(8),
  nl   NUMBER
)

5.3Excel数据导入

5.4正常“两次分组”源代码

先按照公司分组,再按照分组 得到的数据是每个公司每年的员工信息
直接添加约束条件ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值