IT정보사전

[SQL]GROUP BY, HAVING, DISTINCT절 사용방법 본문

DataBase

[SQL]GROUP BY, HAVING, DISTINCT절 사용방법

작은나무0530 2019. 1. 9. 18:01
728x90
반응형

안녕하세요~작은나무입니다!!
오늘은 프로젝트를 진행하면서 GROUP BY와 DISTINCT에 대한 의견의 차이가 있어 어떤 차이점이 있는지 알아봤습니다.

GROUP BY란?
- 테이블 조회 결과를 GROUP으로 나누어 결과를 보여줄 수 있다.
- 집계함수는 GROUP BY절에 추가하지 않아도 된다. (AVG, SUM, COUNT, MIN, MAX등)

HAVING이란?
- GROUP BY한 결과에 조건을 추가하여 결과를 보고 싶을때 사용한다. (WHERE절과 같다고 보시면 될 것 같습니다.)

DISTINCT란?
- GROUP BY와 동일하게 조회결과를 GROUP으로 나누어 결과를 보여줄 수 있다. (UNIQUE한 컬럼 조회에 많이 사용)

집계함수를 사용하여 특정 GROUP으로 분류하고 정렬이 필요하다면 GROUP BY절을, 특정 GROUP 구분없이 중복 제거가 필요할 경우 DISTINCT를 사용하는 것이 좋다. 이렇게 사용해야 속도면에서 조금이라도 이득을 볼 수 있다.

예를 들어 아래와 같은 경우는 DISTINCT를 사용하는 것이 좋다.
   SELECT COUNT(DISTINCT deptname) AS 부서 Count,
               COUNT(deptname) AS 전체 Count
   FROM temp_data

집계 함수가 필요한 경우는 GROUP BY를 사용한다.
   SELECT deptname, COUNT(deptname)
   FROM temp_data
   GROUP BY deptname

GROUP BY와 DISTINCT는 아래와 같이 사용한다.
SELECT [컬럼] FROM [테이블] GROUP BY [컬럼]
SELECT DISTINCT [컬럼] FROM [테이블]

[예제]
- 부서별 사원수 조회
   SELECT deptname, COUNT(deptname) AS 사원수
   FROM temp_data
   GROUP BY deptname
   ORDER BY COUNT(deptname)

[결과]
deptname    |    사원수
------------     ----------
총무팀                       2
재경팀                       3
인사팀                       2

[예제]
- 부서별 최고령 사원, 연봉 TOP 사원 조회
   SELECT deptname, MAX(age) AS 연령, MAX(price) AS 연봉
   FROM temp_data
   GROUP BY deptname

[결과]
deptname    |      연령      |             연봉
------------     ----------      ---------------
총무팀                     55                85,000,000
재경팀                     45                45,000,000
인사팀                     40                30,000,000

[예제]
- 부서중 사원수가 3명 이상인 부서 조회
   SELECT deptname, COUNT(deptname) AS 사원수
   FROM temp_data
   GROUP BY deptname
     HAVING COUNT(deptname) > 2

[결과]
deptname    |      사원수
------------     ----------
인사팀                       3


728x90
반응형
그리드형
Comments