从HR架构中,如何获得每个员工的工作转换数量?
我的尝试:
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;
它确实给出了答案,但我不确定是否正确。代码编写正确吗?
答案 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
,以使所有人感到困惑,因此为了人类可读性,我将其反转。