Нахождение количества рабочих смен - PullRequest
0 голосов
/ 27 октября 2018

Как из схемы управления персоналом получить количество рабочих смен каждого сотрудника?

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 голосов
/ 27 октября 2018

Вы получаете неверные результаты, потому что вы группируете по 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, написанное задом наперед, чтобы сбить с толку всех, поэтому я изменил его для удобства чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...