SQL Выбрать и считать выпуск - PullRequest
0 голосов
/ 06 марта 2019

Я не уверен, как сформулировать заголовок вопроса, чтобы он применялся более широко (так что это, вероятно, не очень хороший вопрос для SO). Это имеет смысл, только показывая мои конкретные таблицы и столбцы.

У меня есть две таблицы project и project_team. Каждый проект может иметь несколько сотрудников, работающих над конкретным проектом.

проект таблица:

+----------------+------------------+--------+
| project_number | project_name     | deptNo |
+----------------+------------------+--------+
| 1              | Web App          | 1      |
+----------------+------------------+--------+
| 2              | Art History Pres | 2      |
+----------------+------------------+--------+
| 3              | Machine Learning | 1      |
+----------------+------------------+--------+

команда проекта таблица:

+----------------+-------------+------------+
| project_number | employee_id | role       |
+----------------+-------------+------------+
| 1              | 1           | Lead Dev   |
+----------------+-------------+------------+
| 2              | 2           | Consultant |
+----------------+-------------+------------+
| 1              | 3           | Frontend   |
+----------------+-------------+------------+

Пример, который я использую, просит меня вернуть номер проекта, название проекта и количество сотрудников, которые работали над ним по роли .

Вот что у меня сейчас есть:

select role, count(employee_id) from project_team group by role;

Это должно учитывать каждого сотрудника, выполняющего определенную роль, если я сделал это правильно.

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

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Использование Left Join даст вам все детали проекта (можно использовать). Таким образом, в приведенном ниже запросе приведены все номера / имена проектов с различными ролями (x, y, z и т. Д.).

Ваша первая мысль верна, нам нужно соединение здесь, поскольку project_team не имеет project_name и т. Д. Плюс, здесь соединение слева означает, что может быть вероятность того, что все номера проектов могут быть недоступны в таблице project_team. Чтобы не пропустить пропущенные номера проектов, я использовал Left join

      select p.project_number,
       p.project_name,t.role, 
        count(t.employee_id) from 
       project p left join 
       project_team t 
       on t.project_number  = 
       p.project_number 
       group by p.project_number,
        p.project_name,t.role;
1 голос
/ 06 марта 2019

Вы можете объединить таблицы, а затем сгруппировать по идентификатору проекта, имени и роли:

SELECT   p.project_number, project_name, role, COUNT(*)
FROM     project p
JOIN     project_team t ON p.project_number = t.project_number
GROUP BY p.project_number, project_name, role
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...