@groulls

Как в запросе получить корректную сумму значений поля при ссылающей записи на эту ячейку?

Проблема в следующем: Необходимо найти сумму значений в поле БД всех ячеек принадлежащих к определенным атрибутам(т.е для массива атрибутов создается ячейка или множество ячеек - записи в БД), при это есть связь 1:M таблицы "Ячеек" и таблица "Занятия ячейки" т.е зная id ячейки мы можем несколько раз сделать запись и на основе этого рассчитать сколько ячеек всего, сколько занято и сколько доступно.

Сейчас запрос выглядит следующим образом:

select 
s.id as Id,
sa.id_attribute as IdAtr,
sum(a.limit) as All,
sum(case when c.status_active = false then 1 else 0 end) as Fact,
sum(a.limit) - sum(case when c.status_active = false then 1 else 0 end) as Access
from public."schedule" as s
left join public."schedule_attribute" as sa on sa.id_schedule = s.id
left join public."access_cell" as a on a.id__attribute = sa.id
left join public."closed_cell" as c on c.id_access_cell = a.id
group by
s.id,
sa.id_attribute


Проблема в том, что если в свободную ячейку мы ссылаем один раз в таблицу closed_cell все хорошо, но если несколько раз, то сумма высчитывается не корректно, возрастая в зависимости от значения в поле limit таблицы access_cell.
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ответы на вопрос 1
@MaLuTkA_UA
Извините за плохое оформление пишу с телефона, вот мой пример как это можно сделать (если я правильно понял что вам нужно)
with test as (select id_access, sum(1) as close 
			  from Close where status = 0
			 group by id_access)
select S.*, Atr.name AS Aname, SUM("limit") AS limit, 
sum( t.close), sum("limit") - sum(t.close)
from Schedule S
join Attribute Atr ON Atr.id_schedule = S.id
join Access Acc on Acc.id_attribute = Atr.id
left join test t on Acc.id = t.id_access
group by Atr.name, S.id, S.name
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы