当前位置: 首页 > 知识库问答 >
问题:

MySQL查询:与其他列不同的总和列值

司徒河
2023-03-14

我试图建立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.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(选择)对所有的首次存款进行求和,或者有没有一种方法可以使用JOIN(选择)但使用一些内存节约技巧?

使现代化我们也可以使用押金。科目\与科目表相关的科目id。

共有1个答案

轩辕远
2023-03-14

此查询将为您提供第一笔存款的客户id金额,而不使用子查询。

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;

显然,您也可以得到

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

 类似资料:
  • 问题内容: 我有2列,像这样: 我想对金额求和,以获得结果 到目前为止,我已经尝试过(但失败了)的是: 问题答案: 删除中的单引号。它使列名转换为字符串。

  • 问题内容: 我有这样的桌子 我想获得具有相同发明编号的订单数量总和 那就是想要这样的结果 我们如何编写mysql查询 问题答案: 利用聚合函数并根据进行分组。 GROUP BY子句

  • 问题内容: SQL查询是否可以返回一些常规列和一些聚合列? 喜欢 : 问题答案: 您应该使用group by语句。 GROUP BY语句与聚合函数结合使用,以按一个或多个列对结果集进行分组。 例如: 您可以在此处看到完整的示例。

  • 问题内容: 这段代码可以正常工作,但是我又长又令人毛骨悚然。 如您所见,它由3个重复部分组成,用于检索: 玩家名称和他们玩过的游戏数量 玩家名称和他们赢得的游戏数量 玩家姓名和输掉的游戏数量 并且每个还包括2个部分: 玩家名称和以玩家_1身份参加的游戏数量 玩家名称以及他们作为玩家_2参加的游戏数量 如何简化呢? 结果看起来像这样: 问题答案: Postgres 9.4* 或更高版本中的 聚合子句

  • 问题内容: 我需要用一列更新表的每一行,作为同一表中其他两列的总和 像这样 UPDATE table1 SET table1.column1 =每行的总和(table1.column1 + table1.column2) 我试过了 因此,我可以通过首先选择所有rowId来迭代每个rowid来做到这一点 但是我需要在一个查询中处理该表中的所有行 当我尝试: 这将汇总column1和column2的所

  • 本文向大家介绍如何使用MySQL查询连接来自不同列的字符串和其他字符串?,包括了如何使用MySQL查询连接来自不同列的字符串和其他字符串?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是执行串联的查询。在这里,我们有名字和姓氏。这样一来,所有字符串值的开头还会附加一个字符串- 这