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
반응형
그리드형