SQL2007. 4. 18. 15:18
참고 : Oracle Magazine

SELECT b.department_name, a.job_id, sum(a.salary) sal, count(a.employee_id) emp_count
FROM employees a, departments b
WHERE a.department_id = b.department_id
GROUP BY b.department_name, a.job_id;

위 쿼리를 실행했을 때
9i와 10g의 결과가 서로 다르게 나타난다.

사용자 삽입 이미지

9i에서의 쿼리 결과


사용자 삽입 이미지

10g에서의 쿼리 결과


ORACLE 데이터베이스 릴리스 간에는 중요한 GROUP BY 방식의 차이가 있다. 이러한 차이는 GROUP BY가 두 개 이상의 Parameter를 받을 때 결과로써 더욱 확연하게 드러나는 데, 각 ORACLE 데이터베이스 릴리스 별로 GROUP BY 방식은 아래처럼 설명할 수 있다.

Oracle 8i Database : Character Sort GROUP BY
Oracle 9i Database : Binary Sort GROUP BY
Oracle 10g Database : Hash based GROUP BY

캐릭터 소트와 바이너리 소트가 호환될 수 있는 것은 US7ASCII 문자 셋이 처리될 때 뿐일 것이다. ORACLE 9i의 GROUP BY와 같이 내부적으로 바이너리 소트 매커니즘을 사용할 때에는 그룹된 Parameter가 어떤 선호 인덱스의 영향을 받냐에 따라서도 Parameter 간의 우선 순위가 역전될 수 있다.
Posted by 영화처럼

사랑합니다. 편안히 잠드소서