댓글에 주고받은 내용도 캡쳐해서 올립니다.
finecomp
이 정도는 아무 dbms에서나 수행해도 결과가 같을텐데, SQL까지 다 만들고 직접 안해 본 이유는 뭔가요???
2020.12.01. 08:04:24
질문 작성자
결과가 다르대요 dbms마다
2020.12.01. 12:13:24
==================================================================================
결과가 다르대요 dbms마다...??? 이것만 얼핏 들으면 얘기한 사람이 거짓말쟁이 라고 할 뻔 했습니다...^^;
혹시 데이터 값들은 전부 동일한게 나오긴 하는데...;
group by 한 결과의 최종순서가 각각 다르게 나오는 이유가 뭔지가 궁금하신 거 아닌가요...?
(심지어 동일 dbms에서도 순서가 다르게 나올 수 있음)
이 이유라면 간단합니다. group by를 구현하는 dbms 내부의 방법 차이입니다.
dbms 내부에서 group by를 수행할 때, 크게 sort group by 와 hash group by 방식으로 나뉩니다.
1) sort group by 방식은 group by 기준의 항목들로 sort를 해서 중복 제거를 하고 집계를 하는 방식입니다.
당연히 group by 기준으로 sort된 결과로 나오겠죠?...그러나 추가 sort 과정이 필요 해 쿼리 성능이 나쁩니다.
2) hash group by 방식은 hash 함수를 이용하여 중복제거를 하고 집계하는 방식입니다.
이 때는 hash 함수 결과 값의 순서로 조회되므로, 원래의 데이터 순서와는 다르게 되나, 쿼리 성능은 훨씬 좋습니다.
이 부분이 dbms마다 순서가 다 다를수 있습니다. 각 dbms마다 고유의 hash함수를 가지며 다를 수 있으니까요.
실제 오라클에서도 버전 및 쿼리하는 복잡도나 case 등 에 따라, 두 가지가 혼용되어 실행계획에 나타납니다.
그러므로 어떤 경우에도 반드시 순서를 보장해야 한다면, 명시적으로 group by 후 order by 까지 꼭 써 주세요.
건승하세요~