mysql - 如何将表与行值条件连接?

标签 mysql sql mariadb

下面是我的表格数据

表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/

相关文章:

sql - 如何在 Perl 的 DBI 中为可变 SQL 函数使用占位符?

php - 在 WordPress 中读取 sql 文件

php - CakePHP 数据库连接 "Mysql"丢失,或无法创建

mysql - 获取给定日期范围内的 id

mysql - 选择两个不同行中具有一定值的所有零件号

mysql - 将 MySQL 身份验证插件更改为 `caching_sha2_password`

mysql - 从 mariadb 5.5 升级/更新到 10

mysql - IAM 数据库身份验证 - 如何使用 CLI 生成的 token

php - 如何使用 PHP 中的复选框将 MySQL 查询搜索从 0 更改为 1

mysql - 有时我得到 IoT Mysql 查询 - 子查询返回超过 1 行