면접 준비하면서 SQL 기초 공부 중인데, 부서별로 가장 높은 급여를 받는 사람의 이름을 출력하고 싶어서 쿼리를 짰습니다.
코드:
CREATE TABLE employees (
emp_name VARCHAR(50),
dept_name VARCHAR(50),
salary INT
);
INSERT INTO employees VALUES ('김철수', '개발팀', 5000), ('이영희', '개발팀', 6000), ('박지민', '인사팀', 4000);
SELECT emp_name, dept_name, MAX(salary)
FROM employees
GROUP BY dept_name;
오류: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'employees.emp_name' which is not functionally dependent on columns in GROUP BY clause
시도: GROUP BY에 dept_name을 썼는데도 안 돼서 컬럼 순서를 바꿔보기도 했습니다.
질문: 분명히 부서별로 묶었는데 왜 emp_name 컬럼 때문에 에러가 발생하는 건가요?
댓글8
-
빗방울
2026.10.30 08:58
-
빗방울
2026.10.30 11:21
맞아요ㅋㅋ 윈도우 함수 써서 rank 매기는 방법도 있을 것 같은데
서브쿼리가 제일 무난하긴 하겠네요
-
빗방울
2026.10.30 12:21
맞음ㅋㅋ 이거 처음 공부할 때 다들 겪는 늪인듯
그냥 서브쿼리로 최대값 먼저 뽑고 조인 거는 게 제일 속 편하더라고요
-
빗방울
2026.10.30 12:42
맞아요ㅋㅋ 서브쿼리 짜기 귀찮으면 윈도우 함수 쓰는 게 훨씬 깔끔할 수도 있을 듯함
-
빗방울
2026.10.30 12:32
MySQL 설정에서 sql_mode의 only_full_group_by 옵션 켜져 있어서 그런 걸 거예요ㅋㅋ
이거 끄면 돌아가긴 하는데 실무에선 위험해서 그냥 공부하신 대로 짜는 게 맞음ㄷㄷ
-
빗방울
2026.10.30 13:20
원래 GROUP BY 쓰면 SELECT에는 묶은 기준이나 집계함수만 올 수 있어서 그래요ㅋㅋ
그냥 쿼리 짤 때
'그룹화한 기준 말고 딴 걸 가져오려면 어떻게 해야 하지?'라고 생각하시면 편할 듯함
-
빗방울
2026.10.30 13:23
이거 그냥 GROUP BY에 emp_name까지 다 넣어버리면 에러는 안 날 텐데ㅋㅋ
근데 그렇게 하면 결과가 생각하신 거랑 다르게 나올 거예요ㄷㄷ
공부하시다가 멘붕 오지 말고 천천히 다시 짜보세요ㅋㅋ
-
빗방울
2026.10.30 13:58
이거 개념 잡기 전까지는 진짜 헷갈리는 부분임ㅋㅋ
내 생각엔 그냥 쿼리 두 번 짠다고 생각하고 접근하는 게 제일 빠를 듯함ㄷㄷ
화이팅하세요ㅋㅋ
모든 이야기1464
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
이거 서브쿼리로 묶어서 처리해야 될 것 같네요ㅋㅋ GROUP BY에 없는 컬럼은 그냥 못 가져오게 막아둔 듯함