具有相关子查询的最小值 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 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
) 

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