Как создать запрос с группировкой и подсчетом результатов с нескольких таблиц (postgresql sql)
надо посчитать общую сумму урона для конкретного парка Например в таблице contract парк с id 8328 фигурирует два раза, id контракта 743, 513. Посмотрев таблицу дтп мы видим, что урон составляет: 8124+30159 = 38283
Проблема в том, что я не могу понять как создать такой запрос с нескольких таблиц. таблицы связаны отношением 1:1. но когда я пытаюсь в таблице контракты по id_парк сгруппировать по id_контракт, чтоб потом в таблице дтп получить данные по урону, у меня постоянно сообщение об ошибке.
Ответы (1 шт):
Автор решения: Namerek
→ Ссылка
create table contracts (
id int primary key ,
client_id int,
unit_id int,
park_id int
);
create table crashes (
event_id int primary key ,
contact_id int references contracts on update cascade on DELETE restrict ,
event_date date default current_date,
damage_amount int
);
insert into contracts (id, client_id, unit_id, park_id)
values (969, 13, 3, 5532),
(743, 14, 4, 8328),
(513, 15, 5, 8328),
(938, 18, 8, 5421);
insert into crashes (event_id, contact_id, event_date, damage_amount)
values (11, 969, '2021-03-12', 31909),
(21, 938, '2021-02-08', 2152),
(20, 743, '2021-07-03', 8124),
(14, 513, '2021-08-08', 30159)
;
Ну вот приблизительно в таком виде хочется получать вопросы
Ответ
select park_id, sum(c2.damage_amount)
from contracts c
join crashes c2 on c.id = c2.contact_id
group by park_id
| park_id | sum |
|---|---|
| 5421 | 2152 |
| 8328 | 38283 |
| 5532 | 31909 |
