SQL MySQL 中的查询包含数学比较
SQL query in MySQL containing mathematical comparison
我需要一个 SQL 以比较方式使用 table A 上的(随机化)值从 table B 中查找值。 Table A 值以随机方式生成。 Table B值已经按照累积分布函数的方式排序。需要的是 SQL 将从 table B 中获取满足条件的第一行。
Table A:
+----+-------+
| ID | value |
+----+-------+
| 1 | 0.1234|
| 2 | 0.8923|
| 3 | 0.5221|
+----+-------+
Table B:
+----+-------+------+
| ID | value | name |
+----+-------+------+
| 1 | 0.2000| Alpha|
| 2 | 0.5000| Beta |
| 3 | 0.7500| Gamma|
| 4 | 1.0000| Delta|
+----+-------+------+
Result should be:
+----+-------+------+
| ID | value | name |
+----+-------+------+
| 1 | 0.1234| Alpha|
| 2 | 0.8923| Delta|
| 3 | 0.5221| Gamma|
+----+-------+------+
值0.1234比B的所有值都小,但Alpha值最小
值 0.8923 小于 1.000 --> Delta。
值 0.5221 小于 0.7500 和 1.000,但 0.7500 最小 --> Gamma。
此查询仅在 table A 有一个值时有效:
select value, name
from B
where (select value from A) < value;
关于如何使用完整的 table A 完成这项工作有什么想法吗?
您可以使用子查询来获取您需要的数据:
SELECT a.ID, a.value,
(SELECT b.name FROM TableB b WHERE a.value < b.value ORDER BY b.ID ASC LIMIT 1) as name
FROM TableA a
在这种情况下,对于 table A 中的每一行,您会在 table B 中找到第一条记录,该记录在列 value
中具有更大的数字。根据您的要求,运算符 <
可能会更新为 <=
- 这取决于您的要求
我需要一个 SQL 以比较方式使用 table A 上的(随机化)值从 table B 中查找值。 Table A 值以随机方式生成。 Table B值已经按照累积分布函数的方式排序。需要的是 SQL 将从 table B 中获取满足条件的第一行。
Table A: +----+-------+ | ID | value | +----+-------+ | 1 | 0.1234| | 2 | 0.8923| | 3 | 0.5221| +----+-------+ Table B: +----+-------+------+ | ID | value | name | +----+-------+------+ | 1 | 0.2000| Alpha| | 2 | 0.5000| Beta | | 3 | 0.7500| Gamma| | 4 | 1.0000| Delta| +----+-------+------+ Result should be: +----+-------+------+ | ID | value | name | +----+-------+------+ | 1 | 0.1234| Alpha| | 2 | 0.8923| Delta| | 3 | 0.5221| Gamma| +----+-------+------+
值0.1234比B的所有值都小,但Alpha值最小
值 0.8923 小于 1.000 --> Delta。
值 0.5221 小于 0.7500 和 1.000,但 0.7500 最小 --> Gamma。
此查询仅在 table A 有一个值时有效:
select value, name from B where (select value from A) < value;
关于如何使用完整的 table A 完成这项工作有什么想法吗?
您可以使用子查询来获取您需要的数据:
SELECT a.ID, a.value,
(SELECT b.name FROM TableB b WHERE a.value < b.value ORDER BY b.ID ASC LIMIT 1) as name
FROM TableA a
在这种情况下,对于 table A 中的每一行,您会在 table B 中找到第一条记录,该记录在列 value
中具有更大的数字。根据您的要求,运算符 <
可能会更新为 <=
- 这取决于您的要求