繁体   English   中英

MySQL:如何对具有多个条件的连接查询(子查询)求和?

[英]MySQL: How to sum on joined queries (subqueries) with multiple conditions?

我有两个表:

表 Y:表明货币在哪个时间段内有效

+-----------+---------+------+
| starttime | endtime | name |
+-----------+---------+------+
| 1         | 2       | Mark |
| 3.4       | 3.6     | Fred |
| 2         | 2.2     | Fred |
+-----------+---------+------+

表Z

+-----------+---------+------+-------+
| starttime | endtime | name | money |
+-----------+---------+------+-------+
| 1.5       | 1.7     | Mark | 0.1   |
| 1.4       | 3.5     | Fred | 0.2   |
| 0.9       | 1.0     | Fred | 0.3   |
| 1.2       | 2.5     | Fred | 0.5   |
+-----------+---------+------+-------+

我想要的是:

+------+---------------+
| name | sum_validmoney|
+------+---------------+
| Mark | 0.1           |
| Fred | 0.7           | **=> this is 0.2+0.5 (because those rows overlapped in start/endtime segments)**
+------+---------------+

我希望根据表 Y 中指示的时间段约束(有界)对表 Z 中的行进行求和。也就是说,要在表 Z 中求和的行必须在表 Y 中找到的行中具有时间段(也有表 Z 上其他查询的其他过滤器;但我认为这与此处无关)

我对 MySQL 很陌生。 我试过子查询,但认为我错过了一些关键; 我不确定这是否可以在没有一些复杂的循环结构的情况下完成,而 mysql 似乎没有做好准备。

看起来您想在其范围与表y中至少一个范围重叠的行上过滤表z

如果是这样,一种方法是:

select name, sum(money) sum_valid_money
from z
where exists (
    select 1
    from y 
    where y.name = x.name and y.starttime <= x.endtime and y.endtime >= x.starttime
)
group by name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM