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 中选择值)< 值;任何想法如何使用全表 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
列中具有较大的编号。根据您的要求,运营商 <
可能需要更新为 <=
- 这取决于您的要求
【讨论】:
@amdixon 谢谢,我忘了 mysql 不支持 TOP以上是关于MySQL中包含数学比较的SQL查询的主要内容,如果未能解决你的问题,请参考以下文章
在 JPA 的 SQL 查询中的 FROM 语句中包含子查询
如何在 Spark Scala SQL 查询中包含 0 值?