MySQL 查询:对另一列具有不同的列值求和

MySQL query: sum column values with distinct for another column

我正在尝试构建 MySQL 具有多个连接的查询以及连接值的总和。有3个table:customer、account和deposit。帐户和存款正在通过他们的 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 的解决方法。但真正的问题是求和"first deposits made by customers"。在对结果进行分组之前,我们可能会看到类似:

... 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) as deposit",因为从存款 table 获取所有存款行时会占用大量内存。

我在这里看到了一个有趣的答案Sum values from one column if Index column is distinct? 但它适用于 MSSQL。

所以问题是:有没有一种方法可以在不使用 JOIN(SELECT) 的情况下对所有第一笔存款求和,或者也许有一种方法可以使用 JOIN(SELECT) 但使用一些内存经济技巧?

更新。 我们也可以使用 deposit.account_id 与帐户 table.

相关联

此查询将为您提供第一笔存款的 customer_idamount,无需使用子查询。

select d1.customer_id, d1.amount
  from deposit d1
    left join deposit d2
      on d1.customer_id = d2.customer_id and d1.id > d2.id
  where d2.id is null;

显然你也可以获得 sum:

select sum(d1.amount) total_first_deposit
  from deposit d1
    left join deposit d2
      on d1.customer_id = d2.customer_id and d1.id > d2.id
  where d2.id is null;

您还可以获得总金额,以及第一笔存款的金额,如下所示:

select sum(d3.amount) total_deposit, sum(case when d3.id = d1.id then d3.amount end) total_first_deposit
  from deposit d1
    left join deposit d2
      on d1.customer_id = d2.customer_id and d1.id > d2.id
    inner join deposit d3
      on d1.customer_id = d3.customer_id and d2.id is null