2011-12-31 2 views
2

아래의 쿼리를 사용하여 평균 설면과 최소 설면 사이의 10cm 차이를 감지합니다. 그러나 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

그룹 별 선택란의 모든 열은에 집계되거나 그룹에 포함되어야합니다. 집계 표현식에 대한 조건은 다음과 같이 HAVING 절에 표시해야합니다

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. 따라서 WHERE에있는 AVG()MIN()GROUP BY 이후에야 평가됩니다.

하지 WHERE에, HAVING에 aggreagte 기능을 가지고 이러한 조건을 사용하여

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)