이전 글에서 GROUP BY에 대해서 알아보았습니다.
2022.07.25 - [SQL문] - SQL문 테이블 그룹 나누는 방법
2022.07.26 - [분류 전체보기] - SQL문 GROUP BY구 주의 할 점
이전 글에서는 집약한 결과에서 조건을 지정을 해서 선택하는 방법에 대해서는 공부를 하지 않았습니다. 이번 글에서는 조건을 지정을 하는 방법에 대해서 알아보겠습니다.
예을 들어서 집약한 결과에서 결과 행이 5행인 그룹만 선택을 하고자 하는 경우에 어떻게 할 까요? WHERE 구를 알고 있다면 대부분 WHERE 구를 이용을 하고자 할 것입니다.
하지만 이 WHERE 구는 행을 선택을 위한 조건만 지정을 할 수가 있습니다. 그래서 GROUP BY 조건에는 이용을 할 수가 없습니다.
이때 이용을 하는 것이 HAVING 구입니다. 그럼 어떻게 이용을 할 수가 있는지 확인을 하여 보도록 하겠습니다.
SELECT < 열명>,<열명2>,<열명3> FROM < 테이블명> GROUP BY < 열명1>, <열명2>,<열명3> HAVING <그룹값에 대한 조건> ;
위 구문을 실행을 할 때 DBMS 내부 실행 순서는 아래와 같습니다.
SELECT > FROM > WHERE > GROUP BY > HAVING 이런 식으로 실행이 됩니다.
아래 구문을 보도록 하겠습니다.
SELECT M_CLASS ,COUNT(*) FROM MyTest01 GROUP BY M_CLASS ;
M_CLASS | COUNT
PC부품 | 5
사무용품 | 5
기타용퓸 | 100
HAVING 구를 이용을 하지 않고 GROUP BY 구를 이용을 하였습니다. 여기서 행수가 5인 그룹만 출력을 하고자 하는 경우에 아래와 같이 구을 작성을 하여서 실행을 하시면 됩니다.
SELECT M_CLASS ,COUNT(*) FROM MyTest01 GROUP BY M_CLASS HAVING COUNT(*) = 5 ;
이렇게 작성을 하고 실행을 하여 보면 아래와 같은 결과를 얻을 수가 있습니다.
M_CLASS | COUNT
PC부품 | 5
사무용품 | 5
HAVING 구에 쓸수가 있는 요소는 어떻게 될까?
HAVING 구 사용을 할 수가 있는 요소가 제한이 되어 있기 때문에 HAVING 구를 이용을 할 때는 아래 세 가지 요소만 이용을 하셔야 합니다.
- 상수
- 집약 함수
- GROUP BY 구 기술한 열명
경우에 따라서 WHERE 구를 이용을 해서 조건을 지정을 하는 경우와 HAVING 구를 이용을 해서 조건을 지정을 하는 경우 동일한 결과를 얻을 수가 있습니다.
예을 들어서 두 구문을 보시면 확인을 할 수가 있습니다.
SELECT M_CLASS ,COUNT(*) FROM MyTest01 GROUP BY M_CLASS HAVING M_CLASS = 'PC부품' ;
SELECT M_CLASS ,COUNT(*) FROM MyTest01 WHERE M_CLASS = 'PC부품' GROUP BY M_CLASS ;
이렇게 두 구문은 동일한 결과를 출력을 합니다. 그래서 상황에 따라서 사용자가 선택을 하시면 됩니다.
참고적으로 이야기를 하자면 WHERE구를 이용을 하는 경우와 HAVING 구를 이용을 해서 처리를 할 때 속도가 차이가 있습니다.
처리 속도 측면에서 확인을 하면 HAVING 구 보다는 WHERE구를 이용을 해서 처리를 하는 것이 속도가 더 빠르게 처리가 됩니다.
이 부분을 참고를 해서 이용을 하시면 됩니다.
'SQL문' 카테고리의 다른 글
SQL 문 트랜잭션 1편 (0) | 2022.08.30 |
---|---|
SQL문 테이블 그룹 나누는 방법 (0) | 2022.07.25 |
SQL문 집약 2편 (0) | 2022.07.21 |
SQL문 논리연산자 2편 & 집약 (0) | 2022.07.20 |
SQL문 비교연산자 2편 (0) | 2022.07.18 |
SQL 산술연산자와 비교연산자 (0) | 2022.07.13 |
SQL 주석 작성법 (0) | 2022.07.11 |