[강용]님이 남기신 글:
>수고 많으십니다.
>현재 저는 mysql 3.23.41을 사용하고 있습니다.
>그룹함수를 사용할경우 좀이해가 않되서 조언
구합니다.
>
>select name,price from 터이블 having price > avg(price)*0.5;
>와
>select name,price from 테이블 where prce > 직접구한상수;
>위 두 결과가 다른게 나타나네요 직접 계산을 해봐도
>평균의 반보다 높은 가격을 갖는 칼럼이 존재해도
>하나 정도만 구해지니.. 조언 부탁드립니다..
========================================
일단은 후자의 SQL 구문이 맞습니다.
전자에서
>select name,price from 터이블 having price > avg(price)*0.5;
이 SQL 구문은 맞지만 그 내부적 연산을 어떻게 이해해야할지
모르겠네요.
HAVING 구문은 GROUP BY colname 과 같이 특정 컬럼들을 그룹으로
묶었을 경우에 해당됩니다.
즉 그룹으로 묶었을 경우,
- 그룹에 관련된 통계나(그룹함수
이용)
- 그 그룹을 대표하는 컬럼이름과 그 값(대부분 첫번째 값임)
이 HAVING 의 조건이 됩니다.
그런데 위의 전자의 SQL 구문은 명확하게 GROUP 이 없기 때문에
avg(price) 이 값이 어떻게 내부적으로 결정되어지는 저도
잘모르겠네요.
방금 테스트해 보았는데 역시 avg(price) 이 값은 전체에 대한
평균값도
아니고 해당 레코드의 값도 아닌것만큼은 확실합니다.
결론적으로
전자의 SQL 구문은 명확하지 않은 SQL 구문인것 같네요.
후자와 같이 전체에 대한 평균값을 구하고 SQL 문을 완성하는
것이
좋을 듯 하네요.
|