查找作业开关的数量

时间:2018-10-27 07:19:58

标签: sql oracle oracle11g

从HR架构中,如何获得每个员工的工作转换数量?

ERD

我的尝试:

select e.first_name, count(*)-1 switches
from hr.job_history j 
  right outer join hr.employees e on (j.employee_id=e.employee_id)
group by e.first_name, j.employee_id;

它确实给出了答案,但我不确定是否正确。代码编写正确吗?

enter image description here

1 个答案:

答案 0 :(得分:0)

由于在e.first_name, j.employee_id上进行分组,因此结果不正确。对于没有工作经历的每个员工,j.employee_id将为空,然后您的计数将反映该名字的员工人数。 (它不会显示在您的结果中,但是在我的Oracle HR样本架构中,我分别为没有工作经历的“ David”,“ John”和“ Peter”各获得2行。)

下面,我在e.employee_id子句中将其更改为使用j.employee_id而不是group by

select e.employee_id, e.first_name
     , count(*) -1 switches
from   hr.employees e
       left join hr.job_history j 
            on  j.employee_id = e.employee_id
group by e.first_name, e.employee_id
order by switches desc, e.first_name;

我还删除了一些多余的括号(join语法中没有括号)和outer关键字,该关键字是有效的但是可选的(我有一些关于删除无用杂物的知识)。 right outer join只是向后写的left outer join,以使所有人感到困惑,因此为了人类可读性,我将其反转。