当前位置: 首页 > 面试题库 >

具有相同ID的MySQL SUM

锺离穆冉
2023-03-14
问题内容

很抱歉,我只学习了PHP和MySQL,已经搜索了一个多星期,但是没有找到任何答案。

我创建了一个简单的财务脚本,该表如下所示:

table_a
aid | value
1   | 100
2   | 50
3   | 150

table_b
bid | aid | value
1   | 1   | 10
2   | 1   | 15
3   | 2   | 5
4   | 2   | 10
5   | 3   | 25
6   | 3   | 40

我想要这样的结果

No | ID | Total | Balance
1  | 1  | 10    | 90
2  | 1  | 25    | 75
3  | 2  | 5     | 45
4  | 2  | 15    | 35
5  | 3  | 25    | 125
6  | 3  | 65    | 85

有人可以帮助我解决我的问题吗?

谢谢


问题答案:
SELECT
   tb.bid as No,
   ta.aid as ID,
   tb.value as Total,
   ta.value-tb.total as Balance
FROM
  table_a AS ta
  INNER JOIN (
    SELECT
      tbx.aid AS aid,
      tbx.bid AS bid,
      tbx.value AS value,
      SUM(tby.value) AS total
    FROM 
      table_b AS tbx
      INNER JOIN table_b AS tby ON tby.aid=tbx.aid AND tby.bid<=tbx.bid
    GROUP BY tbx.bid
    ORDER BY tbx.bid
  ) AS tb ON tb.aid=ta.aid
ORDER BY tb.bid

正如@Quassnoi指出的那样,这对于MySQL来说不是很有效。我尝试使用怪胎连接而不是子查询,因为内部查询本身就可以使用。

编辑

对此引起了一些兴趣,发现连接版本的速度是@Quassnoi的子查询版本的两倍……有人知道为什么会这样吗?

编辑

回答第二个问题(在下面的评论中):

SELECT
  table_a.aid AS aid,
  SUM(table_b.value) AS Total,
  table_a.value-SUM(table_b.value) AS Balance
FROM
  table_a
  INNER JOIN table_b ON table_a.aid=table_b.aid
GROUP BY table_a.aid


 类似资料:
  • 在我的身体里我有3

  • 我是Kafka的初学者。我知道具有相同组id的多个消费者不能在一个主题中使用来自同一个分区的消息。我想知道如果来自一个消费组的多个Kafka消费者从一个分区读取相同的消息会发生什么,为什么这是一件坏事。 。

  • 问题内容: 在以下代码中,我不明白为什么当它属于两个不同的对象时具有相同的ID? 问题答案: 我认为这是正在发生的事情: 取消引用时,将在内存中创建其副本。该存储位置由以下位置返回 由于没有引用到刚刚创建的方法的副本,因此GC将其回收,并且该内存地址再次可用 取消引用时,将在相同的内存地址(可用)中创建它的副本,您可以再次使用该地址。 第二个副本是GCd 如果您要运行一堆其他代码并再次检查实例方法

  • 问题内容: 让我们创建两个列表: 出: 我创建了两个独立的列表,输出显示了两个不同的内存地址。这不足为奇。但是,现在让我们在没有分配的情况下做同样的事情: 出: 还有第二次: 出: 我不确定如何解释这一点。为什么这两个未命名列表具有相同的内存地址? 问题答案: 从文档: 返回对象的“身份”。这是一个整数,可以保证在此对象的生存期内唯一且恒定。 具有不重叠生存期的两个对象可能具有相同的id()值。

  • 我有四个表 我想获得所有付款金额和现金预付款金额的总和,这些金额与从特定日期起与某人加入的贷款具有相同的ID。 这是我的代码,但总和计算不正确:

  • 我需要在多个线程中使用来自Kafka分区的记录,每个线程上有唯一的记录要处理。我有以下代码,我不知道是什么错误 结果 应为: