[Database] MySQL DISTINCT와 GROUP BY

황인용·2020년 8월 29일
0

Database

목록 보기
11/16

DISTINCT와 GROUP BY

DISTINCT

  • 주로 UNIQUE한 컬럼이나 튜플(레코드)를 조회하는 경우 사용
  • 정렬하지 않고 결과를 가져옴
  • GROUP BY에 비해 성능이 빠름

GROUP BY

  • 데이터를 그룹핑해서 그 결과를 가져오는 경우 사용
  • 그룹핑한 컬럼의 데이터만 가져오기때문에 결과는 DISTINCT와 비슷
  • 그룹핑한 컬럼 기준으로 정렬해서 가져옴
  • Filesrot작업을 하기 때문에 DISTINCT보다 성능이 느림
  • HAVING절을 통해 집계함수를 조건으로 사용가능

HAVING

  • WHERE에서는 집계함수를 조건으로 사용할 수 없음
  • 따라서 GROUP BY에서 HAVING절을 추가하여 집계함수를 조건으로 사용하여 결과를 가져옴

DISTINCT와 GROUP BY 예제

Actor table

empnoname(이름)year(입사년도)deptno(직종번호)sal(월급)
1이지은200831000
2여진구20081950
3이동욱201211200
4천우희201421050
5안재홍20161800

...

DISTINCT를 사용한 중복 데이터 제거

SELECT DISTINCT deptno 
FROM TEST.Actor;

deptno
------
3
1
2

GROUP BY를 사용한 중복 데이터 제거

SELECT deptno
FROM TEST.Actor
GROUP BY deptno; 

deptno
-----
3
1
2

집계함수 사용 직종별 평균 월급 확인

SELECT deptno, AVG(sal)
FROM TEST.Actor
GROUP bY deptno;

deptno | AVG(sal)
-----------------
3 | 1000
1 | 983.3333333333
2 | 1050

HAVING 사용 월급이 1000같거나 높은 직종 확인

SELECT deptno, AVG(sal)
FROM TEST.Actor
GROUP BY deptno
HAVING AVG(sal) >= 1000;

deptno | AVG(sal)
-----------------
3 | 1000
2 | 1050

참고

DISTINCT와 GROUP BY절

구루비 지식창고! SQL 전문가 가이드(2013년) - GROUP BY, HAVING 절

profile
dev_pang의 pang.log

2개의 댓글

comment-user-thumbnail
2021년 2월 23일

깔끔하게 잘 정리해두셨네요. 이 포스트 말고도 이전 것들도 포함해서요!

1개의 답글