-
카테고리
-
세부 분야
데이터 분석
-
해결 여부
미해결
WHERE 서브쿼리
21.03.08 23:13 작성 조회수 185
1
강사님 안녕하세요. WHERE - IN 서브쿼리 질문 드립니다.
저는 group by가 쓰이면 select 절에는 꼭 기준 컬럼이 함께 들어가야 한다고 알았거든요.
그런데 where -in 서브쿼리 안에는 group by가 사용되어도 기준 컬럼이 안들어가도 되는 것 같더라고요.
예를 들면 아래처럼요.
SELECT EMPNO, ENAME, DEPTNO, SAL
FROM EMP
WHERE SAL IN (SELECT MAX(SAL)
FROM EMP
GROUP BY DEPTNO);
서브쿼리는 이 법칙에서 예외인지요??
답변을 작성해보세요.
1
윤선미
지식공유자2021.03.09
안녕하세요.
꼭 WHERE 서브쿼리가 아니어도, SELECT 에 컬럼 명시 없이 GROUP BY 사용이 가능하긴 합니다. (GROUP BY 사용에 제약이 심한 DB들은 간혹 불가능하기도 합니다.)
하지만, SELECT에 명시하지 않았기 때문에 어떤 그룹에서 나온 연산 값인지 알 수가 없어 권장되는 방법은 아닙니다.
예를 들어, 위의 쿼리에서 MAX(salary)로 3000, 4000이 연산되어 WHERE 서브쿼리에 들어갔다고 생각하면 employee 테이블 전체에서 salary가 3000, 4000인 값들이 department와 상관없이 선택되어 출력 될 겁니다.
관련 링크들을 드리니 GROUP BY 심화 공부 하시는데 도움이 되길 바랍니다.
- https://stackoverflow.com/questions/2176715/can-i-group-by-something-that-isnt-in-the-select-line
- https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions-and-modifiers.html
감사합니다 :)
답변 1