Я пытаюсь построить запрос MySQL с несколькими соединениями с суммой объединенных значений. Есть 3 таблицы: клиент, счет и депозит. Аккаунт и депозит присоединяются к клиенту по их полю customer_id. В конце запроса все клиенты группируются по их group_id:
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».
Одно ограничение здесь, я боюсь, я не могу использовать «левое соединение (SELECT ... FROM Deposit) как депозит», потому что это занимает много памяти при получении всех строк депозита из таблицы депозитов.
Я видел здесь интересный ответ Суммировать значения из одного столбца, если Столбец индекса отличается? Но это для MSSQL.
Итак, вопрос: есть ли способ суммировать все первые депозиты без использования JOIN(SELECT) или, может быть, есть способ с JOIN(SELECT), но с некоторым трюком экономии памяти?
ОБНОВИТЬ. Мы также можем использовать deposit.account_id, который связан с таблицей аккаунтов.