참고 : 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의 결과가 서로 다르게 나타난다.
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 간의 우선 순위가 역전될 수 있다.
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 간의 우선 순위가 역전될 수 있다.