
Lv. 2 / GROUP BY
쉽다! 고 생각했는데 살짝 삐끗한 부분이 있었다.
생각한대로라면 SUM과 MAX를 동시에 사용해야하는데 SUM에만 GROUP BY로 그룹화 지정이 들어가야했다.
한번에 하고싶어서 이래저래 많이 에러를 봤다.
하지만 역시 한번 그룹화를 통해 토탈 스코어 값을 계산한 뒤 다시 최댓값을 찾는 방식으로 진행했다.
이전 포스팅에서처럼 그룹화의 기준이 아니면서 집계함수가 쓰이지 않은 컬럼을 여러개 출력해야하는데 이때문에 MAX의 결과값을 WHERE에 조건으로 붙여주었다.
이 코드를 작성하면서도 계속 더 깔끔하게 작성할 수 있을 것 같은데... 하는 생각을 계속 했다.
아니나 다를까 질문 게시판에서 정말 명료하게 풀이하신 분을 봤다.
ORDER와 LIMIT을 통해 MAX를 대체한 케이스인데 맞다 이런 방법도 있었지, 싶었다.
한번 읽어보면 좋을 것 같다.
JOIN, LIMIT를 활용한 문제풀이!
/*
조건에 맞는 사원 정보 조회하기
GROUP BY
*/
WITH CALC_SCORE as (
SELECT SUM(SCORE) as SCORE
FROM HR_GRADE
WHERE YEAR = 2022
GROUP BY EMP_NO
)
SELECT SUM(SCORE) as SCORE,
EMP_NO,
EMP_NAME,
POSITION,
EMAIL
FROM HR_EMPLOYEES LEFT JOIN HR_GRADE
USING (EMP_NO)
GROUP BY EMP_NO
HAVING SUM(SCORE) = (SELECT MAX(SCORE) FROM CALC_SCORE);
확실히 python도 sql도 오랜만에 문제를 풀다보니 시야가 좁아졌다는 생각이 들었다.
앞으로 꾸준히 학습해야겠지만, 문제를 푸는 것만이 능사는 아니다.
알고있지만 하기 어려운 것이기도 한데..
현재는 빈약하게 PS로만 채워지고있는 이 블로그에 여러 다른 정보들을 결합한 공부 내용을 정리하는 것도 좋겠다.
당장 이력서 쓰는 것에 마음이 급해서 (또 곧 있는 가족여행에 마음이 둥실둥실해서..) 공부가 많이 뒷순위로 밀렸는데 시간을 좀더 쪼개서 해야할 일을 병행해서 처리할 수 있는 사람이 되어야겠다.