2011-12-31 3 views
2

Я использую следующий запрос, чтобы обнаружить разницу в 10 сантиметров между средним уровнем снега и минимальным уровнем снега. Но PhpMyadmin говорит, что это недопустимое использование групповой функции. Не могу понять, что не так. Ты знаешь это?Исчерпывающий запрос с mysql с использованием группы по

SELECT lud, res_id, resort, 
MIN(snow_valley) as snow_val_min, 
MAX(snow_valley) as snow_val_max, 
ROUND(AVG(snow_mountain),0) as snow_mnt_avg, 
MIN(snow_mountain) as snow_mnt_min 
from sv_condition_sw 
where (lud ='2011-12-31') AND (AVG(snow_mountain)-MIN(snow_mountain)>10) GROUP by res_id 

ответ

2

Каждый столбец в вашем выборе с группой должен быть либо агрегирован, либо включен в группу. Условия на агрегированном выражении должны появляться в имеющем п, например:

SELECT lud, res_id, resort, 
MIN(snow_valley) as snow_val_min, 
MAX(snow_valley) as snow_val_max, 
ROUND(AVG(snow_mountain),0) as snow_mnt_avg, 
MIN(snow_mountain) as snow_mnt_min 
from sv_condition_sw 
where (lud ='2011-12-31') 
GROUP by lud, res_id, resort 
HAVING AVG(snow_mountain)-MIN(snow_mountain)>10 
0

Причина ошибка заключается в том, что порядок выполнения запроса SQL является FROM ->WHERE ->GROUP BY ->HAVING ->SELECT ->ORDER BY. Итак, AVG() и MIN(), которые у вас есть в WHERE, не оцениваются до GROUP BY.

Используйте те условия, которые имеют aggreagte функции в HAVING, а не в WHERE:

SELECT lud, res_id, resort, 
    MIN(snow_valley) AS snow_val_min, 
    MAX(snow_valley) AS snow_val_max, 
    ROUND(AVG(snow_mountain),0) AS snow_mnt_avg, 
    MIN(snow_mountain) AS snow_mnt_min 
FROM sv_condition_sw 
WHERE (lud ='2011-12-31') 
GROUP by res_id 
HAVING (AVG(snow_mountain)-MIN(snow_mountain)>10) 
Смежные вопросы