• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

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

답변을 작성해보세요.

1

안녕하세요.

꼭 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

감사합니다 :)