Привет У меня проблема при создании запроса между 4 таблицами в моей базе данных. Сначала я немного объясню структуру моих таблиц и их взаимосвязь:
Марка
+--------------+
| id | name |
|--------------|
| 1 | toyota |
| 2 | suzuki |
| 3 | mazda |
+--------------+
Автомобиль
+------------------------------------+
| id | brand_id | model |
--------------------------------------
| 1 | 1 | XXXXX |
| 2 | 2 | YYYYY |
| 3 | 1 | ZZZZZ |
+------------------------------------+
Аренда
+------------------------------------------------+
| id | car_id | date_init | date_end | amount |
--------------------------------------------------
| 1 | 1 | 2019-01-05 | 2019-01-12 |3000 |
| 2 | 2 | 2019-01-22 | 2019-01-30 |1800 |
| 3 | 3 | 2019-02-14 | 2019-01-26 |2500 |
+------------------------------------------------+
Техническое обслуживание
+------------------------------------+
| id | rental_id | amount |
--------------------------------------
| 1 | 3 | 600 |
| 2 | 3 | 320 |
| 3 | 2 | 180 |
+------------------------------------+
По сути, в этих таблицах регистрируется аренда автомобиля в течение определенного времени, это время аренды четко определено.Деталь в том, что во время аренды вы можете выполнить любое или много технического обслуживания автомобиля, поэтому у меня есть таблица технического обслуживания.Из моего запроса мне нужно узнать, сколько денег и сгенерированных моделью автомобиля, включая суммы на техническое обслуживание, я должен получить примерно так:
+-----------------+
| brand | total |
|-----------------|
| toyota | 4000 |
| suzuki | 3800 |
| mazda | 2700 |
+-----------------+
Мне удалось получить суммы, основываясь только наарендовать, но я не понимаю, как я также могу связать суммы таблицы обслуживания, это то, что у меня есть в моем запросе:
select b.name as brand, sum(r.amount) as Total, m.mnt
from rental r
left join (
select rental_id, sum(amount) as mnt
from maintenance
group by m.rental_id
) as m on r.id = m.rental_id
inner join car c
on r.car_id = c.id
inner join brand b
on c.brand_id = b.id
group by b.name, m.mnt
с учетом запроса, который я только что опубликовал, этоответ:
+-------------------------+
| brand | total | mnt |
|--------------------------
| toyota | 3000 | NULL |
| toyota | 2500 | 920 |
| suzuki | 1800 | 180 |
+-------------------------+
ПРИМЕЧАНИЕ: разделяет сумму арендной платы и обслуживания в разных столбцах, чтобы лучше понять проблему, в конце мне нужно добавить один столбец, добавляющийитого как.