首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:如何对多个条件的连接查询(子查询)求和?

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

Stack Overflow用户
提问于 2020-09-18 21:19:30
回答 1查看 31关注 0票数 0

我有两张表:

表Y:指明货币在什么时间段内有效

代码语言:javascript
复制
+-----------+---------+------+
| starttime | endtime | name |
+-----------+---------+------+
| 1         | 2       | Mark |
| 3.4       | 3.6     | Fred |
| 2         | 2.2     | Fred |
+-----------+---------+------+

表Z

代码语言:javascript
复制
+-----------+---------+------+-------+
| 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   |
+-----------+---------+------+-------+

我想要的:

代码语言:javascript
复制
+------+---------------+
| 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似乎没有很好地支持这些结构。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-18 21:38:13

看起来您想要根据表y中范围重叠范围至少为一个范围的行来筛选表z

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

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63956557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档