Минимум с коррелированным подзапросом mySql - PullRequest
0 голосов
/ 30 марта 2020

Задача: 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 ??

Я делаю это неправильно?

спасибо

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Это немного сложнее, чем вы думаете. Необходимо исправить не только ваше предложение о корреляции (оно должно соответствовать годам), но и условие 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
) 

Примечание: существует второй критерий порядка разрыва связей: в данном случае это самый ранний месяц года минимальная температура (и достаточное количество дождя) возвращается.

0 голосов
/ 30 марта 2020

Похоже, ваше соединение неверно. Вам просто нужно найти минимальную температуру для определенного года, а затем получить месяц для него. Измените объединение на 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...