인프런 커뮤니티 질문&답변

베지밀님의 프로필 이미지
베지밀

작성한 질문수

실전! Querydsl

집합

group by 결과에 대한 질문입니다.

작성

·

342

2

안녕하세요 영한님 

강의 재밌게 잘 듣고 있습니다. 간단한 질문이 있습니다~!

group by를 한 다음에 

Tuple teamA = result.get(0);

으로 알려주셨는데 0번 index로 가져온 결과값이 Team B가 아니라 Team A에 관한 집계 결과를 보장하는지 궁금합니다. (내부적으로 정렬 같은 방식이 일어나는건가요..??ㅎㅎ)

답변 1

7

안녕하세요 베지밀님.

답변 드리기위해 groupBy에 대해서 찾아보니 다음과 같은 내용을 확인하였고,

  • GROUP BY 절과 HAVING 절의 특징
    • HAVING 절은 GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시할 수 있다.
    • GROUP BY 절에 의한 소그룹별로 만들어진 집계 데이터 중, HAVING 절에서 제한 조건을 두어 조건을 만족하는 내용만 출력한다.
    • HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치한다.
  • 일부 데이터베이스의 과거 버전에서 GROUP BY 절에 명시된 칼럼의 순서대로 오름차순 정렬을 자동으로 정렬(비공식적인 지원이었음)하는 경우가 있었으나, 원칙적으로 관계형 데이터베이스 환경에서는 ORDER BY 절을 명시해야 데이터 정렬이 수행된다.
  • ANSI/ISO 기준에서도 데이터 정렬에 대한 내용은 ORDER BY 절에서만 언급되어있지, GROUP BY 절에는 언급되어 있지 않다.

출처: http://www.gurubee.net/lecture/2373

.

H2 database,(1.4.200) mysql(8.0)에서 테스트 해보았습니다.(검은 콘솔창은 MySQL입니다. 동일한 H2와 동일한 쿼리로 진행하였습니다.)

- team의 name을 group by로 출력한 결과 h2, mysql 둘 다 이름을 기준으로 출력 되었습니다. 

.

- team의 name 중 teamA를 teamC로 바꾸고(update 쿼리) 실행한 결과 h2는 이름을 기준으로 정렬 되었으나  mysql은 teamC가 먼저 출력되어 이름 순으로 출력되지 않았습니다.

.

블로그에 정리되어있는 내용과 두 데이터베이스의 실험 결과를 통해 group by의 순서를 모든 데이터베이스마다 (명시된 순서대로)보장하지 않는 다는 것을 확인할 수 있었습니다.

.

감사합니다.

김영한님의 프로필 이미지
김영한
지식공유자

OMG님 감사합니다!

베지밀님의 프로필 이미지
베지밀

작성한 질문수

질문하기