MySQL 은 SQL 92 사양중 일부만을 지원합니다. 표준 SQL 을 모두 지원하지 않습니다. 나머지 자세한 것은 매뉴얼을 읽으시고 어느것이 되고 어느것이 안되는지 파악해야만 합니다. 앞으로 비슷한 문제가 계속 될 것이기 때문입니다.
> 안녕하세요? 저는 문정봉입니다.
> 다름이 아니라 다음과 같은 테이블이 있습니다.
>
> 테이블명 : toopyo
>
> tpo_user varchar -- 사용자
> tpo_movie varchar -- 영화코드
> tpo_maker varchar -- 제작자
> tpo_value varchar -- 투표에서 얻은 점수
> tpo_stamp varchar -- 투표한 시간
>
> 다름이 아니라 투표라는 테이블이 있는데요. 한테이블에서 점수를 정렬을
> 동시에 하려고 합니다.
> 사용자가 몇명이고, 투표한 값은 얼마인지,
> 그리고, 우선 영화코드로 그룹으로 설정하여 한 영화에서 사용자가 몇명
> 들어왔고[count(tpo_user)], 총 합[sum(tpo_value)]이 얼마이고 평균은 [avg
> (tpo_value)] 얼마인지 알려고 합니다.
> 그리고, 정렬은 평균값이 높은 순으로 정렬을 하려고 하는데요.
> 다음과 같은 쿼리를 썼습니다.
> 첫번째 쿼리 :
> select count(tpo_user),sum(tpo_value), avg(tpo_value) from toopyo gro
> up by tpo_movie order by avg(tpo_value);
>
> 에러가 나더군요.
order by, where, having 등의 절에서는 함수를 이용할 수 없습니다. (참으로 이해가 안가지만 표준 SQL 을 다 지원하지 못한다는 점에서 그냥 이해하기로 했습니다.)
다음과 같이 질의구문을 바꾸어 보세요.
select count(tpo_user) as cnt, avg(tpo_value) as average from toopyo groyp by tpo_movie order by average;
> 두번째 쿼리 :
> select a.* from (select * from toopyo group by tpo_movie) a order by
> avg(tpo_value);
>
> 에러가 났습니다.
subselect (nested select) 구문은 지원되지 않습니다. 이것은 그냥 프로그램 중에서 따로 구현하는 수 밖에 없습니다. 정 이 기능이 필요하다면 PostgreSQL 을 사용하도록 하세요.
|