Есть ли способ подсчитать оператор concat?

Мне нужно написать запрос, чтобы перечислить имена всех сотрудников (в 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;

Мне нужно, чтобы второй столбец имел числовое значение. Буду признателен за любую помощь в этом!

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
0
29
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать коррелированный подзапрос.

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.

Uueerdo 09.04.2019 22:56

Не уверен, но поскольку это левое соединение, оно может возвращать нули, поэтому я отредактировал, чтобы считать нули как нули. Я полагаю, что не все сотрудники являются начальниками!

forpas 09.04.2019 22:59

Другие вопросы по теме