任务是: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 by
和limit
更容易
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)