Опитвам се да създам 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".
Едно ограничение тук е, страхувам се, че не мога да използвам „ляво присъединяване (ИЗБЕРЕТЕ ... ОТ депозит) като депозит“, защото отнема много памет, докато получава всички редове за депозити от таблицата с депозити.
Видях интересен отговор тук Суми стойности от една колона, ако Индексната колона е различна? Но е за MSSQL.
Така че въпросът е: има ли начин да се сумират всички първи депозити без да се използва JOIN(SELECT) или може би има начин с JOIN(SELECT), но с някакъв трик за икономия на памет?
АКТУАЛИЗИРАНЕ. Можем също да използваме deposit.account_id, който е свързан с таблицата на акаунта.