Ваши таблицы не нормализованы: по всей видимости, во всех 3 таблицах есть дублирующаяся информация. (если workstation_number не является уникальным и floor / workstation_number не является составным ключом. Я бы посоветовал против этого ...)
Я бы предложил схему, аналогичную этой (предполагая отношение многих ко многим между пользователями ирабочие станции):
Workstation User_Workstation User
id <- - workstation_id
workstation_number user_id - -> id
machine_type name
name
floor
Каждое из полей в Workstation
описывает атрибут рабочей станции. Любая информация, которую вы могли собрать из двух других таблиц, теперь находится в одном месте. Не повторяйте себя! Дублирующиеся данные зло .
Цель:
Мне нужноОбъедините все таблицы, чтобы получить один запрос, чтобы получить общее количество
- каждой рабочей станции,
- машин, развернутых на каждом этаже,
- общее количество голов на этаже.
- Мне нужно получить количество всех рабочих станций для каждого пользователя на одно имя рабочей станции (производственное, непроизводственное).
По отдельности это кусок пирога. (И, если вы запускаете скрипт для получения результатов, это все, что вам нужно)
select count(id) number_of_workstations
from Workstation;
select count(id) workstations_per_floor, floor
from Workstation
group by floor
select count(u.id) users_per_floor, floor
from Workstation w
inner join User_Workstation uw on w.id = uw.workstation_id
inner join User u on u.id = uw.user_id
-- optionally filter by production or non-production
-- where w.name = ?
group by w.floor
Но ваш желаемый результат, похоже, отличается:
+-------+-------------+------+------+------+------+-----+
| Floor | Head Count | Workstations| Machines Deployed |
+-------+-------------+------+------+------+------+-----+
| 6TH | 100 | 150 | 140 |
| 18TH | 200 | 250 | 200 |
| 19TH | 300 | 320 | 310 |
+-------+-------------+------+------+------+------+-----+
I 'Я предполагаю, что Head Count
- это количество пользователей на этаже, Workstations
- это общее количество рабочих станций на этаже, а Machines Deployed
- это ... Понятия не имею. Производство?
select floor, count(u.id) Head_Count, count(distinct w.id) Workstations, -- ??? as Machines_Deployed
from workstation w
left join user_workstation uw on w.id = uw.workstation_id
left join user on u.id = uw.user_id
group by w.floor
(я изменю это на основе отзывов о том, что такое Machines Deployed
)