首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有相关子查询mySql的最小值

具有相关子查询mySql的最小值
EN

Stack Overflow用户
提问于 2020-03-30 05:53:32
回答 2查看 71关注 0票数 0

任务是:Q:显示每年,降雨量超过150毫米的月份中气温最低的月份。

我这样做了:

代码语言:javascript
运行
复制
SELECT  year,month,tmin  
FROM table_name a
where rain>150 AND tmin= (SELECT MIN(tmin) FROM table_name b  WHERE b.tmin=a.tmin)

t.min是该月的最低气温

当我运行这个程序时,我得到了每年的最低温度,那里的降雨量>150毫米

但是有这样的行:

代码语言:javascript
运行
复制
year | month | tmin |
1866 | 1     | 3.8  |
1866 | 2     | 2.9  |
1866 | 11    | 11.1 |

以此类推..

我如何得到这3个值中的最小值,以便只有一个1866年的数据,而不是3个?

我做错了吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-30 06:11:33

这比你想象的要复杂一点。不仅您的关联子句需要固定(它应该在年份上匹配),而且您还希望在子查询中包含where条件,这样您就可以过滤与降雨条件匹配的月份。

总的来说,我认为在子查询中使用order bylimit更容易:

代码语言:javascript
运行
复制
select year, month, tmin  
from table_name t
where month = (
    select t1.month
    from table_name t1
    where t1.year = t.year and t1.rain > 150
    order by t1.tmin, t1.month limit 1
) 

注意:第二个排序标准是为了打破平局:在这种情况下,返回一年中具有最低温度(和足够的雨量)的最早月份。

票数 0
EN

Stack Overflow用户

发布于 2020-03-30 06:00:15

看起来您的联接不正确。您只需查找特定年份的最低温度,然后获取它的月份。将tmin上的连接更改为year

代码语言:javascript
运行
复制
select year, 
    month, 
    tmin  
FROM table_name a
where rain > 150 
    AND tmin = (SELECT MIN(tmin) 
                FROM table_name b 
                where a.year=b.year)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60921212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档