簡體   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