-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
group by 결과에 대한 질문입니다.
21.06.20 04:13 작성 조회수 219
2
안녕하세요 영한님
강의 재밌게 잘 듣고 있습니다. 간단한 질문이 있습니다~!
group by를 한 다음에
Tuple teamA = result.get(0);
으로 알려주셨는데 0번 index로 가져온 결과값이 Team B가 아니라 Team A에 관한 집계 결과를 보장하는지 궁금합니다. (내부적으로 정렬 같은 방식이 일어나는건가요..??ㅎㅎ)
답변을 작성해보세요.
7
OMG
2021.06.20
안녕하세요 베지밀님.
답변 드리기위해 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의 순서를 모든 데이터베이스마다 (명시된 순서대로)보장하지 않는 다는 것을 확인할 수 있었습니다.
.
감사합니다.
답변 1