Соединение влево, где в одной таблице 2 результата, удваивает сумму результатов из соответствующей таблицы - PullRequest
1 голос
/ 11 февраля 2011

Итак, у меня есть этот запрос, и я не могу понять, как изменить поведение. По сути, он должен возвращать набор результатов из таблицы приложений, с общей суммой платежей из таблицы платежей с соответствующим идентификатором, и с общей суммой сборов из таблицы сборов с соответствующим идентификатором. Это прекрасно работает, когда есть один платеж за одну плату. Однако в тех случаях, когда взимается 2 комиссии, платежи, по-видимому, удваиваются. Я бы предположил, что если бы было 3 платы, это было бы втрое и т. Д.

Я пытался использовать сумму (разные платежи. Сумма) в качестве платежей, но проблема в том, что вполне вероятно, что будет 2 платежа на одну и ту же сумму. Я не уверен, что это возможно, сделайте сумму, где есть определенный идентификатор, соответствующий количеству ... Я все еще изучаю SQL.

select applications.*,
permits.title as permit,
sum(payments.amount) as payments,
sum(fees.unitprice) as fees
from applications
left join permits on applications.permitid=permits.id
left join payments on payments.appid=applications.id
left join fees on fees.appid=applications.id
where applications.deleted=0
and payments.deleted=0
and fees.deleted=0
and fees.unitPrice > 0
and applicationdate between '1975-1-1' and '2011-2-10'
group by applications.id
order by permits.deptid,permits.title,status,dateissued,applicationdate

Буду признателен за любую помощь - я пытался исправить это в течение нескольких часов! Взял у меня несколько, чтобы просто выяснить, что было причиной.

1 Ответ

1 голос
/ 11 февраля 2011

Вы можете выполнить агрегацию в производной таблице и присоединиться к ней.

... join (SELECT fees.appid, sum(fees.unitprice) as fees
                  FROM   fees
                  WHERE  fees.deleted = 0
                         and fees.unitPrice > 0
                  GROUP  BY fees.appid) aggregatedfees
         on aggregatedfees.appid = applications.id 
 ...

Кстати: все ваши левые объединения в настоящее время преобразуются во внутренние объединения по предложению where.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...