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



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

我做到了:

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是当月的最低温度

当我运行这个程序时,我会得到每年降雨量>150mm 的最低温度

但也有这样的行:

year | month | tmin |
1866 | 1     | 3.8  |
1866 | 2     | 2.9  |
1866 | 11    | 11.1 |

等等。

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

我做错了吗?

感谢

它比您想象的要复杂一些。不仅您的correlation子句需要固定(它应该在年份上匹配(,而且您还希望在子查询中使用where条件,这样您就可以在符合下雨条件的月份上进行筛选。

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

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
) 

注意:第二个排序标准是为了打破这种联系:在这种情况下,返回一年中温度最低(降雨量足够(的前一个月。

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

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)

最新更新