MySQL中包含数学比较的SQL查询

Posted

技术标签:

【中文标题】MySQL中包含数学比较的SQL查询【英文标题】:SQL query in MySQL containing mathematical comparison 【发布时间】:2015-11-09 01:35:12 【问题描述】:

我需要一个 SQL 以比较的方式使用(随机化)表 A 上的值从表 B 中查找值。表 A 值以随机方式产生。表 B 的值已按累积分布函数排序。需要的是 SQL 会从表 B 中获取满足条件的第一行。

表 A: +----+-------+ |身份证 |价值 | +----+-------+ | 1 | 0.1234| | 2 | 0.8923| | 3 | 0.5221| +----+-------+ 表 B: +----+--------+------+ |身份证 |价值 |姓名 | +----+--------+------+ | 1 | 0.2000|阿尔法| | 2 | 0.5000|测试版 | | 3 | 0.7500|伽玛| | 4 | 1.0000|三角洲| +----+--------+------+ 结果应该是: +----+--------+------+ |身份证 |价值 |姓名 | +----+--------+------+ | 1 | 0.1234|阿尔法| | 2 | 0.8923|三角洲| | 3 | 0.5221|伽玛| +----+--------+------+

值0.1234小于B的所有值,但Alpha值最小。

值 0.8923 小于 1.000 --> Delta。

值 0.5221 小于 0.7500 和 1.000 但 0.7500 是最小的 --> Gamma。

此查询仅在表 A 具有一个值时才有效:

选择值、名称 从乙 其中(从 A 中选择值)&lt 值;

任何想法如何使用全表 A 完成这项工作?

【问题讨论】:

【参考方案1】:

您可以使用子查询来获取您需要的数据:

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

在这种情况下,对于表 A 中的每一行,您会在表 B 中找到第一条记录,该记录在 value 列中具有较大的编号。根据您的要求,运营商 &lt; 可能需要更新为 &lt;= - 这取决于您的要求

【讨论】:

@amdixon 谢谢,我忘了 mysql 不支持 TOP

以上是关于MySQL中包含数学比较的SQL查询的主要内容,如果未能解决你的问题,请参考以下文章

mysql怎么查询字符串中包含字符

sql 查询字段中包含回车 如何查出含有回车的字段

在 JPA 的 SQL 查询中的 FROM 语句中包含子查询

如何在 Spark Scala SQL 查询中包含 0 值?

MySQL - View 的 SELECT 在 FROM 子句中包含一个子查询

pentaho cde在sql查询中包含/排除where子句