Мне нужно написать запрос, чтобы перечислить имена всех сотрудников (в 1 столбце) и количество лиц, за которыми они наблюдают.
Я пытался использовать счет в сочетании с конкатом, но это не сработает, и я просто не знаю, как двигаться дальше.
select
concat(Boss.firstName, ' ', Boss.lastName) as 'Boss',
concat(supervised.firstName, ' ',supervised.lastName) as supervised,
count(supervised.firstName, ' ',supervised.lastName)
from Employees as Boss
left join Employees as supervised on Boss.employeeNumber=supervised.reportsTo;
Мне нужно, чтобы второй столбец имел числовое значение. Буду признателен за любую помощь в этом!
Вы можете использовать коррелированный подзапрос.
SELECT concat(e1.firstname, ' ', e1.lastname) supervisor,
(SELECT count(*)
FROM employees e2
WHERE e2.reportsto = e1.employeenumber) supervised_count
FROM employees e1;
Вам нужно добавить группировку в свой запрос и посчитать строки для каждого босса:
select
concat(Boss.firstName, ' ', Boss.lastName) as Boss,
count(supervised.lastName) counter
from Employees as Boss left join Employees as supervised
on Boss.employeeNumber = supervised.reportsTo
group by concat(Boss.firstName, ' ', Boss.lastName)
Не уверен, но поскольку это левое соединение, оно может возвращать нули, поэтому я отредактировал, чтобы считать нули как нули. Я полагаю, что не все сотрудники являются начальниками!
Подсчет, вероятно, должен быть на чем-то из
supervised
, что обычно не может быть нулевым, напримерreportsTo
, не так ли? В противном случае люди, которые никого не контролируют, будут иметь счет равный 1.