select substring(vi_time from 1 for 2) as hour_as, count(vi_id) as cnt from visit_table group by substring(vi_time from 1 for 2) order by vi_time asc
위와 같은 쿼리입니다. 목적은 타임 값이 들어있는 필드 vi_time 에 대해 시간과 번호개수를 시간으로 그룹바이 하여 구하려고 합니다
다음과 같은 오류가 납니다.
visit_table.vi_time is not single valued. Attributes exposed in aggregate queries must also appear in the group by clause.
참고로 위쿼리는 마이에스큐엘에서 마이에스큐엘형으로 실행시 오류가 없었습니다.
어떻게 하죠?
위와 같은 쿼리입니다. 목적은 타임 값이 들어있는 필드 vi_time 에 대해 시간과 번호개수를 시간으로 그룹바이 하여 구하려고 합니다
다음과 같은 오류가 납니다.
visit_table.vi_time is not single valued. Attributes exposed in aggregate queries must also appear in the group by clause.
참고로 위쿼리는 마이에스큐엘에서 마이에스큐엘형으로 실행시 오류가 없었습니다.
어떻게 하죠?
order by 에 사용한 vi_time 은 substring() 과는 별개의 필드로 취급되므로 group by 절에 명시하시거나 해야 합니다. select 절에는 없지만 order by 절에 있음으로 인하여 select 절에 있는 것과 동일하게 취급되기 때문입니다.
그런데, substring(vi_time ..) 의 결과만 필요하고 정렬 역시 substring(vi_time ...) 순으로만 되면 된다면 정렬을 substring(vi_time ...)에 대하여 할 필요가 없습니다. group by 를 하게 되면 그 결과는 group by 대상에 대하여 자동으로 정렬이 되기 때문입니다.
만약 substring(vi_time ...) 과 별개로 vi_time 에 대하여 정렬을 해야 한다면 결국 select 절에 substring(vi_time ...)와 vi_time 이 모두 있는 것과 마찬가지 이므로 group by 절에 vi_time 을 명시해야 합니다.
substring(vi_time ...) 만으로 정렬을 해도 상관이 없다면 order by 는 제거하여도 됩니다.