Левое соединение или внутреннее соединение - PullRequest
1 голос
/ 12 июля 2019

У меня есть таблица, у Table_employee есть идентификатор сотрудника, зарплата, менеджер (идентификатор соответствующего менеджера каждого сотрудника) и другая таблица Table_manager, в которой есть имя, фамилия каждого менеджера и идентификатор каждого менеджера.

Я пытался создать еще одну таблицу, в которой будут указаны имя, фамилия и количество сотрудников, за которых отвечает каждый менеджер, и общая зарплата этих сотрудников.

У меня проблемы с указанием имени и фамилии менеджера.

Мой код указан ниже.Любая помощь будет принята с благодарностью.

Большое спасибо!

select 
   e.manager, 
   COUNT(e.employee_id), 
   SUM(e.salary) 
FROM 
   Table_employee e 
   Right outer join Table_manager m ON e.manager=m.employee_id 
GROUP BY 
   manager 
ORDER BY 
   manager

Ответы [ 2 ]

2 голосов
/ 12 июля 2019

Используйте LEFT JOIN и агрегацию. Если вы изучаете SQL, просто забудьте RIGHT JOIN. Это почти никогда не нужно. И за LEFT JOIN легче следовать («держите все в таблице first » против «оставьте все в таблице last , что бы это ни было»).

Итак:

select m.employee_id, m.firstname, m.lastname, 
       count(e.employee_id), sum(e.salary)
from Table_manager m left join
     Table_employee e
     ON e.manager = m.employee_id
group by m.employee_id, m.firstname, m.lastname
order by m.employee_id;
1 голос
/ 12 июля 2019

Вам просто нужно добавить имя и фамилию в группу, я думаю?Я упускаю некоторую сложность?

select e.manager, m.firstname, m.lastname, COUNT(e.employee_id), SUM(e.salary)
FROM Table_employee e
Right outer join Table_manager m ON e.manager=m.employee_id\
GROUP BY manager, m.firstname, m.lastname
ORDER BY manager

Тем не менее, порядок обмена так, чтобы менеджер был слева, а сотрудник справа имел больше смысла, чтобы вы не пропустили менеджеров без сотрудников:

select e.manager, m.firstname, m.lastname, COUNT(e.employee_id), SUM(e.salary)
FROM Table_manager m
Right outer join Table_employee e ON e.manager=m.employee_id
GROUP BY manager, m.firstname, m.lastname
ORDER BY manager
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...