具有相关子查询的最小值 mySql
Minimum with a correlated subquery mySql
那个
任务is:Q:显示每年降雨量超过150mm的月份中气温最低的月份。
我这样做了:
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 个?
我做错了吗?
谢谢
您的加入似乎不正确。您只需要查找特定年份的最低温度,然后获取它的月份。将 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)
它比你想象的要复杂一点。不仅你的相关子句需要修复(它应该匹配年份),而且你还需要子查询中的 where
条件,这样你就可以过滤符合 rain 条件的月份。
总的来说,我认为在子查询中 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
)
注意:第二个排序标准是为了打破平局:在这种情况下,返回一年中温度最低(和雨量充足)的最早月份。
那个 任务is:Q:显示每年降雨量超过150mm的月份中气温最低的月份。
我这样做了:
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 个?
我做错了吗?
谢谢
您的加入似乎不正确。您只需要查找特定年份的最低温度,然后获取它的月份。将 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)
它比你想象的要复杂一点。不仅你的相关子句需要修复(它应该匹配年份),而且你还需要子查询中的 where
条件,这样你就可以过滤符合 rain 条件的月份。
总的来说,我认为在子查询中 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
)
注意:第二个排序标准是为了打破平局:在这种情况下,返回一年中温度最低(和雨量充足)的最早月份。