Вы получаете неверные результаты, потому что вы группируете по e.first_name, j.employee_id
.j.employee_id
будет нулевым для каждого сотрудника, у которого нет истории работы, и тогда ваш счет будет отражать количество сотрудников с таким именем.(Это не отображается в ваших результатах, но в моей примерной схеме Oracle HR я получаю по 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
, написанное задом наперед, чтобы сбить с толку всех, поэтому я изменил его для удобства чтения.