下面是我的表格数据
表A
| amount | range | id |
+--------+---------+-----+
| 720 | 1 | 115 |
| 360 | 2 | 115 |
| 180 | 3 | 115 |
| 180 | 4 | 115 |
| 135 | 5 | 115 |
| 135 | 10 | 115 |
表B
+------+-----+
| rank | a_id|
+------+-----+
| 1 | 115 |
| 2 | 115 |
| 3 | 115 |
| 4 | 115 |
| 5 | 115 |
| 6 | 115 |
| 7 | 115 |
| 8 | 115 |
| 9 | 115 |
| 10 | 115 |
我需要通过连接这两个表来获得以下结果。
+------+-----+--------+
| rank | a_id| amount |
+------+-----+--------+
| 1 | 115 |720
| 2 | 115 |360
| 3 | 115 |180
| 4 | 115 |180
| 5 | 115 |135
| 6 | 115 |135
| 7 | 115 |135
| 8 | 115 |135
| 9 | 115 |135
| 10 | 115 |135
因为我尝试过以下查询。但我无法得到确切的结果。因为它只与排名匹配。我也尝试过使用 case 进行查询,但没有得到确切的结果。有关如何解决此问题的任何建议
select rank
, sample_test.amount
from a
join b
on a.id = b.a_id
and rank = range
order
by rank
最佳答案
连接表并按排名、a_id 分组以获得每组的最小金额:
select
b.rank, b.a_id, min(a.amount) amount
from tableb b inner join tablea a
on b.a_id = a.id and b.rank >= a.range
group by b.rank, b.a_id
请参阅demo .
根据间隔和排名,逻辑(不够清晰)可能是在 ON 子句中使用相反的符号,并使用 max 而不是 min:
select
b.rank, b.a_id, max(a.amount) amount
from tableb b inner join tablea a
on b.a_id = a.id and b.rank <= a.range
group by b.rank, b.a_id
请参阅demo .
两个查询(对于此示例数据)返回相同的结果:
| rank | a_id | amount |
| ---- | ---- | ------ |
| 1 | 115 | 720 |
| 2 | 115 | 360 |
| 3 | 115 | 180 |
| 4 | 115 | 180 |
| 5 | 115 | 135 |
| 6 | 115 | 135 |
| 7 | 115 | 135 |
| 8 | 115 | 135 |
| 9 | 115 | 135 |
| 10 | 115 | 135 |
关于mysql - 如何将表与行值条件连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57654573/