Я пытаюсь построить MySQL-запрос с несколькими объединениями с суммой объединенных значений. Есть 3 таблицы: custmer, счет и депозит. Счет и депозит присоединяются к клиенту по полю customer_id. В конце запроса все клиенты группируются по их group_id:MySQL-запрос: сумма значений столбца с отличным от другого столбцом
SELECT customer.*,
COUNT(DISTINCT account.id) as account_count,
SUM(deposit.amount)/(COUNT(deposit.id)/COUNT(DISTINCT deposit.id)) as deposit_sum,
SUM(???) as deposit_first_sum
FROM customer
LEFT JOIN account ON account.customer_id = customer.id
LEFT JOIN deposit ON deposit.customer_id = customer.id
GROUP BY customer.group_id
Проблема: строки присоединился дублируется в то время как я должен сделать некоторые аналитики: Сумм все сумма депозита - вы можете увидеть мой обходной путь здесь для deposit_sum. Но настоящая проблема заключается в сумме «первых депозитов, сделанных клиентами». Перед группирования результатов мы можем видеть, что есть что-то вроде:
... deposit.id deposit.customer_id deposit.amount
... 1 1 10
... 2 1 20
... 3 2 15
... 4 2 30
Так что мне нужно подвести только первое количество для каждого Customer_ID (10 + 15), которое было бы «deposit_first_sum».
Одно из ограничений здесь, я боюсь, я не могу использовать «left join (SELECT ... FROM deposit) как депозит», потому что он занимает много памяти, получая все строки вкладов из таблицы депозитов.
Здесь я нашел интересный ответ Sum values from one column if Index column is distinct? Но это для MSSQL.
Итак, вопрос: есть ли способ суммировать все первые депозиты, не используя JOIN (SELECT), или, может быть, есть способ с JOIN (SELECT), но с некоторым трюком экономики?
ОБНОВЛЕНИЕ. Мы также можем использовать deposit.account_id, который является отношением к таблице счетов.
может отправить результат набора текущего запроса? – Avidos
... депозит записи customer_id, а не account_id? –
и будет ли у пользователя несколько учетных записей? –