如何合并两个SQL查询为子查询以获取目标结果集的最大值
正确实现方案
你原来的写法存在两个问题:
- 内层子查询返回多条结果,用
=匹配会直接报错 - 外层
MAX(column)取的是原表的原始字段值,不是你截取后的数值,无法得到想要的结果
方案1(更简洁,推荐)
直接在MAX函数内写入截取逻辑,同时要把截取得到的字符串转为数值类型,避免字符串排序出现的逻辑错误:
SELECT MAX(CAST(SUBSTR(column, INSTR(column, ' ') + 1, 3) AS UNSIGNED)) AS max_value FROM table WHERE column LIKE '#13 %'
执行后直接返回结果30。
方案2(嵌套子查询写法,和你的思路更接近)
把第一个查询的结果作为临时表,在外层对临时表的字段取最大值:
SELECT MAX(sub_value) AS max_value FROM ( SELECT CAST(SUBSTR(column, INSTR(column, ' ') + 1, 3) AS UNSIGNED) AS sub_value FROM table WHERE column LIKE '#13 %' ) AS temp_table
内容的提问来源于stack exchange,提问作者Béa
相关产品推荐
相关产品推荐

