mysql - 将基于另一个表值修改的表与 MySQL 中的该表连接起来
问题描述
对于以下问题,我需要一些有关 MySQL 查询的帮助。
我有两个表 A(id,ref_id)和 B(ref_id(主键),类,脉冲),其中 A.ref_id 存在于 B.ref_id 中。ref_id 具有从 1 开始的整数值,是 B 的 P_k。
A.id | A.ref_id
1 | 2
2 | 3
B.ref_id | B.pulse | B.class
1 | 100 | X
2 | 50 | Y
3 | 100 | X
我想要做的是创建一个表,其中所有脉冲值的总和对应于所有 B.ref_id 小于 A.ref_id。此外,仅应考虑其 B.class 与从 A.ref_id 引用的 B.ref_id 的 B.class 相同的那些脉冲。例如,
A.ref_id | sum
2 | 50
3 | 200
在此示例中,值为 2 的 A.ref_id 指的是相应的 B.ref_id,因此具有 B.class Y。由于我想要所有 B.ref_id<=2 的脉冲值总和,并且没有其他具有 B.class 的行=Y,sum 的值为 50。但是,对于 A.ref_id=3,对应的 B.class 是 X,我想要迄今为止发生的所有 B.pulse 与同一类的总和。因此 sum 的值将是 100(来自 B.ref_id=1)+ 100(来自 B.ref_id=A.ref_id=3)= 200。
有人可以帮我解决这个问题吗?
我在 MySQL 中需要一些东西,比如:
SELECT A.ref_id, sum
FROM A
JOIN (SELECT class, SUM(B.pulse) as sum
FROM B WHERE B.ref_id<=A.ref_id
GROUP BY B.class) t
ON t.class= (SELECT class FROM B WHERE B.ref_id=A.ref_id)
以上不起作用,因为我无法在子查询(t)中引用 A.ref_id。没有这个条件加入并不能帮助我做我想做的事。
谢谢!!
解决方案
您可以通过将 B 的 2 个副本连接到 A 来做到这一点:
SELECT a.ref_id,
SUM(b2.pulse) `sum`
FROM TableA a
INNER JOIN TableB b1 ON b1.ref_id = a.ref_id
INNER JOIN TableB b2 ON b2.ref_id <= b1.ref_id AND b2.class = b1.class
GROUP BY a.ref_id
请参阅演示。
结果:
ref_id | 和 |
---|---|
2 | 50 |
3 | 200 |
推荐阅读
- mysql - 即使提供了 Bean,SessionFactory 也不会自动装配
- pandas - 熊猫将十六进制转换为负整数
- amazon-ec2 - 自定义 VPC 中的错误
- postgresql - Postgresql:计算具有给定 ID 的行之间的 AVG
- php - SQL子查询返回值减法
- powershell - Powershell 与 Office365 的集成
- mongodb - 如何在我的查询 mongodb 中添加总浪费天数
- spring-boot - 通过 Redis Sentinel 节点连接时从 Jedis 池获取资源的异常
- c# - 将 JSON 类字典反序列化为具有属性的对象
- mpi - 集体对角邻里交流