任务是: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是该月的最低气温
当我运行这个程序时,我得到了每年的最低温度,那里的降雨量>150毫米
但是有这样的行:
year | month | tmin |
1866 | 1 | 3.8 |
1866 | 2 | 2.9 |
1866 | 11 | 11.1 |
以此类推..
我如何得到这3个值中的最小值,以便只有一个1866年的数据,而不是3个?
我做错了吗?
谢谢
发布于 2020-03-30 06:11:33
这比你想象的要复杂一点。不仅您的关联子句需要固定(它应该在年份上匹配),而且您还希望在子查询中包含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
)
注意:第二个排序标准是为了打破平局:在这种情况下,返回一年中具有最低温度(和足够的雨量)的最早月份。
发布于 2020-03-30 06:00:15
看起来您的联接不正确。您只需查找特定年份的最低温度,然后获取它的月份。将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)
https://stackoverflow.com/questions/60921212
复制相似问题