人事管理
This presentation is the property of its rightful owner.
Sponsored Links
1 / 46

人力成本统计分析任务 PowerPoint PPT Presentation


  • 69 Views
  • Uploaded on
  • Presentation posted in: General

人事管理. 人力成本统计分析任务. 任务背景 2-1. 你们项目组现在负责开发一个人事管理系统,你负责人力成本统计分析报表生成任务。 项目经理告诉你: 报表涉及的两个数据表 DEPARTMENTS 、 EMPLOYEES 已经设计好,可通过 dept_emp.txt 脚本创建 报表应提供如下信息: 各部门人数,工资总额,平均工资,最高工资,最低工资,工资差距指数(标准方差) 除报表外,应采取饼图、柱状图、曲线图等直观方式来显示统计结果. 任务背景 2-2. 项目经理告诉你 通过你开发的报表、图表,人力资源部经理可容易的了解: 哪些部门工资水平高?

Download Presentation

人力成本统计分析任务

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


6336659

人事管理

人力成本统计分析任务


6336659

任务背景 2-1

  • 你们项目组现在负责开发一个人事管理系统,你负责人力成本统计分析报表生成任务。

  • 项目经理告诉你:

    • 报表涉及的两个数据表 DEPARTMENTS、EMPLOYEES 已经设计好,可通过 dept_emp.txt脚本创建

    • 报表应提供如下信息:

      • 各部门人数,工资总额,平均工资,最高工资,最低工资,工资差距指数(标准方差)

    • 除报表外,应采取饼图、柱状图、曲线图等直观方式来显示统计结果


6336659

任务背景 2-2

  • 项目经理告诉你

    • 通过你开发的报表、图表,人力资源部经理可容易的了解:

      • 哪些部门工资水平高?

      • 哪些部门工资水平低?

      • 哪些部门工资差距比较大?

      • 哪些部门工资成本最高?

    • 参考下面的报表设计,有助于你完成任务


6336659

报表设计 3-1

  • 工资水平分析报表


6336659

报表设计 3-2

  • 工资差异分析报表


6336659

报表设计 3-3

  • 人力成本分析报表


6336659

关键技术

  • 分组(聚集)函数

    • 分组函数介绍

  • APEX 图表创建

    • 参见下面的构建步骤


6336659

报表构建 9-1

  • 工资水平分析报表

  • 创建页,选择 chart 页类型


6336659

报表构建 9-2

  • 下一步选择 Flash Chart 图表类型

  • 下一步, page name 输入: salary_analysis

  • 下一步,选择 Do not use tabs


6336659

报表构建 9-3

  • 下一步,选择 2D Line Chart Type

在本页,选择图表类型后·,点击 Update 按钮可预览图表效果


6336659

报表构建 9-4

  • 下一步输入 SQL 查询

Build Query 按钮可激活查询构造向导,引导你构造查询语句


6336659

报表构建 9-5

  • 创建并运行页

  • 编辑本页,添加报表区域


6336659

报表构建 9-6

  • 选择 SQL Report


6336659

报表构建 9-7

  • 输入查询语句,并创建区域,运行页


6336659

报表构建 9-8

  • 工资差异分析报表

    • 重复创建图表步骤

    • 选择 2D Column 图表类型

    • 用下面 SQL 语句来创建

      SELECT null link, department_name label, VARIANCE(SALARY) 工资方差

      FROM employees e, departments d

      WHERE e.department_id = d.department_id

      GROUP BY department_name;


6336659

报表构建 9-9

  • 人力成本分析报表

    • 重复创建图表步骤

    • 选择 3D Pie 图表类型

    • 用下面 SQL 语句来创建

      SELECT null link, department_name label, SUM(SALARY) 工资总额

      FROM employees e, departments d

      WHERE e.department_id = d.department_id

      GROUP BY department_name;


6336659

图表测试

  • 根据你所创建的图表,分析现有数据:

    • 哪个部门工资水平最高?

    • 哪个部门工资水平差异最大?

    • 哪个部门人力成本最高?


6336659

作业与练习

  • 计算平均提成

    • 员工的提成为 salary*COMMISSION_PCT

      • 第一种方法:只计算有提成员工的平均提成

      • 第二种方法:计算所有员工的平均提成

  • 计算员工总人数

  • 计算员工的不同工资数

  • 计算员工的不同工作种类数目(JOB_ID)


6336659

总结

  • 掌握分组函数使用方法

  • 掌握 APEX 图表使用方法


6336659

分组(聚集)函数 27-1

  • 在SQL 中,以下分组函数可对整个表或一组特定的行执行运算。每个函数返回一个结果。

    • MIN

      • 用于存储任何数据类型的列,返回最小值。

    • MAX

      • 用于存储任何数据类型的列,返回最大值。

    • COUNT

      • COUNT(表达式) 返回表达式列中非空值的数量。

      • COUNT(*) 返回表中满足SELECT 语句的条件的行数。

    • AVG

      • 用于存储数值数据的列,计算平均值。

    • SUM

      • 用于存储数值数据的列,计算值的总和。


6336659

分组(聚集)函数 27-2

  • 例如,有四个数字: 1、7、4、 8

    • 最小值 MIN 是 1

    • 最大值 MAX 是 8

    • 总和 SUM 是 20 = 1+7+ 4+8

    • 数目 COUNT 是 4

    • 平均值 AVG 是 5 = SUM/ COUNT

    • 方差 VARIANCE 是

    • ( (1-AVG)* (1-AVG) +

    • (7-AVG)* (7-AVG) +

    • (4-AVG)* (4-AVG) +

    • (8-AVG)* (8-AVG) )/ (COUNT-1) =10

    • 标准差 STDDEV 是方差 VARIANCE 的平方根 3.16

  • VARIANCE:

    • 用于存储数值数据的列,计算数据在平均值左右的分布情况。例如,如果班级上次测验的平均分是82%,学生的分数范围在40% 到100% 之间,则此分数的差异将比学生的分数范围在78% 到88% 的情况下大。

  • STDDEV:

    • 与variance 类似,标准偏差测量数据的分布情况。对于平均值大致相同的两组数据,分布越广,标准偏差就越大。


6336659

分组(聚集)函数 27-3

  • 组函数使用要点:

    • 组函数会忽略空值。因为任何值和空值进行运算,结果还是空值。忽略空值可确保得到一个运算结果。

    • 在下面的示例中,计算平均加班费率时没有使用(null) 值。


6336659

分组(聚集)函数 27-4

  • 组函数使用要点:

    • SELECT 子句中可有多个基于相同或不同列的组函数。

    • 还可使用WHERE 子句,将组函数限制在表的子集上。

      SELECT MAX(salary), MIN(salary), MIN(employee_id)

      FROM employees

      WHERE department_id = 60;


6336659

分组(聚集)函数 27-5

  • 组函数使用要点:

    • MIN 和MAX 两个组函数可用于任何数据类型。

    • 使用这些函数,可以找出列表中最后一个人的姓名、最低薪金或最早的聘用日期。

    • 例如,很容易在按字母排序的雇员列表中找到姓名列在第一行的雇员。

      SELECT MIN(last_name)

      FROM employees;


6336659

分组(聚集)函数 27-6

  • 组函数使用要点:

    • 组函数忽略空值。

    • MIN 和MAX 可用于任何数据类型;

    • SUM、AVG、STDDEV 和VARIANCE 只能用于数值数据类型。


6336659

分组(聚集)函数 27-7

  • 组函数使用语法

    SELECT [col1, ] GROUP_FUNCTION(col2) [,…]

    FROM table1,…

    [WHERE condition]

    [GROUP BY col1,…]

    [HAVING group_condition]

    [ORDER BY col1,…];

    • 如果有 WHERE 子句,先执行 WHERE ,根据其条件排除掉无关记录

    • 如果有 GROUP 子句,则先按其指定列的值将剩余记录分组;否则所有记录被看作一组

    • 对每组记录计算分组函数

    • 如果有 HAVING 子句,则根据其中条件选择要显示哪些分组的结果

    • 执行 SELECT 子句,返回相应列

    • 执行 ORDER BY子句,对返回结果进行排序


6336659

分组(聚集)函数 27-8

  • GROUP BY

    • 可以使用GROUP BY 子句将表中的行分成较小的组。然后,可以使用组函数返回每个组的汇总信息。

    • 在所示的SELECT 语句中,根据“部门标识”对行进行分组,然后将AVG 函数自动应用于每个组。

SELECT department_id, AVG(salary)

FROM employees

GROUP BY department_id;


6336659

分组(聚集)函数 27-9

  • GROUP BY

    • 如果想知道每个部门中雇员的最高薪金,该怎样做?可使用GROUP BY 子句指定依据哪一列对行进行分组?

      SELECT MAX(salary)

      FROM employees

      GROUP BY department_id;

    • 但如何区分哪个最高薪金属于哪个部门呢?


27 10

分组(聚集)函数 27-10

  • GROUP BY

    • 通常,我们采用的方法是在SELECT 列表中包含GROUP BY 列。

      SELECT department_id, MAX(salary)

      FROM employees

      GROUP BY department_id;


27 11

分组(聚集)函数 27-11

  • 组函数要求,在SELECT 子句中所列出的任何不属于组函数组成部分的列,都必须在GROUP BY 子句中列出。

    • 此示例中有什么错误?

      SELECT job_id, last_name, AVG(salary)

      FROM employees

      GROUP BY job_id;


27 12

分组(聚集)函数 27-12

  • 还可使用WHERE 子句排除一些行,然后再将剩余行分组。

    SELECT department_id, MAX(salary)

    FROM employees

    WHERE last_name <> ‘King’

    GROUP BY department_id;


27 13

分组(聚集)函数 27-13

  • GROUP BY 原则

    • 使用GROUP BY 子句时,应遵循的重要原则有:

      • 如果SELECT 子句中不仅包含组函数(AVG、SUM、COUNT、MAX、MIN、STDDEV、VARIANCE),还包含其它个体列,则这些个体列还必须出现在GROUP BY 子句中。

      • 不能在GROUP BY 子句中使用列别名。

      • WHERE 子句可在对行进行分组之前排除某些行。


27 14

分组(聚集)函数 27-14

  • 组内组

    • 有时需要将组分为更小的组。例如,您可能希望根据部门对所有雇员进行分组;然后,在每个部门中,按职务进行分组。

    • 本示例说明每个部门中从事每项工作的雇员各有多少。

SELECT department_id, job_id, count(*)

FROM employees

WHERE department_id > 40

GROUP BY department_id, job_id;


27 15

分组(聚集)函数 27-15

  • 嵌套组函数

    • 使用GROUP BY 时,可以嵌套两层组函数。

      SELECT max(avg(salary))

      FROM employees

      GROUP by department_id;

    • 此查询将返回几个值?答案是一个——此查询将找出每个部门的平均薪金,然后从该列表中选择最大值。


27 16

分组(聚集)函数 27-16

  • HAVING

    • 假设我们想找出每个部门的最高薪金,但仅针对有多个雇员的部门进行查找,那该怎么做?此示例中有什么错误?

      SELECT department_id, MAX(salary)

      FROM employees

      WHERE COUNT(*) > 1

      GROUP BY department_id;

      下一张幻灯片将解决此问题。


27 17

分组(聚集)函数 27-17

  • 组函数使用要点:

    • 不能在WHERE 子句中使用组函数:


27 18

分组(聚集)函数 27-18

  • HAVING

    • 与使用WHERE 子句限定所选行一样,您可以使用HAVING 子句来限定组。

    • 在使用GROUP BY 和HAVING 子句的查询中,将首先对行进行分组,然后应用组函数,这样将仅显示与HAVING 子句匹配的组。

    • WHERE 子句用于限制行;HAVING 子句用于限制由GROUP BY 子句返回的组。

SELECT department_id, MAX(salary)

FROM employees

GROUP BY department_id

HAVING COUNT(*) > 1;


27 19

分组(聚集)函数 27-19

  • 在SELECT 语句中,尽管可将HAVING 子句用于GROUP BY 子句之前,但建议您按以下所示的顺序放置每条子句。如果使用ORDER BY 子句,请始终将其放在最后!

    SELECT 列, 组函数

    FROM 表

    WHERE

    GROUP BY

    HAVING

    ORDER BY


27 20

分组(聚集)函数 27-20

  • DISTINCT

    • 关键字DISTINCT 用于仅返回查询中的非重复值或非重复值的组合。

    • 请看右边的查询。如果不使用关键字DISTINCT,该查询将返回D_CDS 表中的所有年份值。

SELECT year as ‘CD Year’

FROM d_cds;


27 21

分组(聚集)函数 27-21

SELECT DISTINCT year AS ‘CD Year’

FROM d_cds;

  • DISTINCT

    • 要消除重复行,请按此处所示使用DISTINCT 关键字。

    • 使用DISTINCT 关键字只返回了所有CD 年份一次,而没有重复值。


27 22

分组(聚集)函数 27-22

  • DISTINCT

    • 关键字DISTINCT 可与所有组函数一起使用。使用DISTINCT 后,函数将仅考虑非重复值。

    • 为什么右侧的两个语句生成不同的结果?

SELECT SUM(salary)

FROM employees

WHERE department_id = 90;

SELECT SUM(DISTINCT salary)

FROM employees

WHERE department_id = 90;


27 23

分组(聚集)函数 27-23

  • DISTINCT

    • 将DISTINCT 与组函数(如COUNT)一起使用时,结果集将返回非重复列值的数量。

    • 雇员们一共从事多少种不同的工作?

    • 有多少种不同的薪金?

SELECT COUNT (DISTINCT job_id)

FROM employees;

SELECT COUNT (DISTINCT salary)

FROM employees;


27 24

分组(聚集)函数 27-24

  • COUNT

    • COUNT(表达式) 返回表达式列中非空值的数量。

    • COUNT(DISTINCT 表达式) 返回表达式列中唯一且非空值的数量。

SELECT COUNT (YEAR)

FROM d_cds

WHERE year < 2001;

SELECT COUNT (DISTINCT year)

FROM d_cds

WHERE year < 2001;


27 25

分组(聚集)函数 27-25

  • COUNT

    • 第一个查询为什么返回null 值?共列出了六条备注,但count 函数只返回了5。为什么?

    • 因为COUNT 忽略列中的null 值。

SELECT comments

FROM d_play_list_items;

SELECT COUNT(comments)

FROM d_play_list_items;


27 26

分组(聚集)函数 27-26

  • COUNT

    • COUNT(*) 返回表中满足SELECT 语句的条件的行数。

      • 例如,要了解在表中2001 年之前出品了多少张CD,可在SELECT 语句中使用COUNT。

    • 希望计算所有行(包括在一列或多列中有空值的行)时,可使用 COUNT(*)。

SELECT COUNT (*)

FROM d_cds

WHERE year < 2001;


27 27

分组(聚集)函数 27-27 <返回>

  • NVL

    • 有时需要在组函数中包括空值。

      • 例如,了解每天顾客所下订单的平均数量,可判断每个月所订的食品数。

      • 有几天餐厅未营业没有顾客,但店主发现相比较仅计算有顾客的天数的平均值而言,计算包括每一天的平均值反映的情况要准确。

      • 可使用以下语句开始编写包括空值的SELECT 语句

        SELECT AVG(NVL(customer_orders, 0))


  • Login