
Lv. 3 / GROUP BY
레벨에 비해 정답률이 높아보이는 문제였는데 역시 간단했다!
각 직원들의 데이터에 부서의 데이터를 LEFT JOIN 해서 연결시킨 후 GROUP BY를 통해 부서별 평균 연봉을 계산해주면 되겠다.
정리하면서 생각해보니 이런 생각이 들었다.
GROUP BY의 기준이 되지도 않고 집계함수가 쓰이지도 않는 컬럼인
DEPT_NAME_EN이 있는데 어떻게 정상적으로 작동하고 성공한거지?
근데 LEFT JOIN을 하면서 하나의 행마다DEPT_NAME_EN가 하나씩 지정되기때문에 그런게 아닐까 싶다.
그런 의미에서 HR_DEPARTMENT에 있는 다른 컬럼들도 DEPT_NAME_EN처럼 들어올 수 있다.
그리고 HR_EMPLOYEES의 컬럼은 들어올 수 없었다. (에러 발생함)
아무래도 계속 원인이 궁금했다.
HR_EMPLOYEES의 컬럼들은 랜덤 값을 출력하지 않고 에러가 발생하는가?질문이 세부적이기도 하고 제목에서도 알 수 있듯이 (그룹화의 기준이 아니고, 집계함수가 쓰이지 않는 컬럼 선택) 너무 주절주절 길어져서 서치에 어려움이 있을 것 같아서 GPT를 이용했다!


여러 질문을 하고 답변을 받았는데 중요 내용을 요약해보자면 이렇다.
ONLY_FULL_GROUP_BY모드가 활성화되었기 때문인 것으로 보인다.
이전에는 아마 활성화되지 않은 환경에서 쿼리를 돌렸던 것 같다.
내 생각이 맞았다.
쿼리문에서 그룹화 기준별로 유니크한 값을 가진다면 집계함수를 사용하지 않아도 의도대로 값을 반환한다.
/*
부서별 평균 연봉 조회하기
GROUP BY
*/
SELECT DEPT_ID, DEPT_NAME_EN, ROUND(AVG(SAL), 0) as AVG_SAL
FROM HR_EMPLOYEES LEFT JOIN HR_DEPARTMENT
USING (DEPT_ID)
GROUP BY 1
ORDER BY 3 DESC;
풀면서도 쉬운데? 왜 레벨 3이 이렇게 쉽지? 했는데 보다보니 의문점이 생겼다.
사소한 부분이긴 하지만 새로운 정보를 얻어갈 수 있어서 소득이 있는 문제였다.