최보름달

[SQL] GROUP BY, HAVING 본문

문송한 회사생활/SQL 공부

[SQL] GROUP BY, HAVING

PieMoon 2020. 8. 13. 23:15

GROUP BY 절 특징

  • FROM절과 WHERE절 뒤에 오며, 데이터들을 작은 그룹으로 분류하여 소그룹에 대한 항목별 통계 정보를 얻을때 사용한다. 
  • GROUP BY로 소그룹을 정한 뒤, SELECT절에 집계 함수를 사용한다. 
  • NULL 값을 가진 행을 제외하고 수행한다. 
  • GROUP BY절에서는 ALIAS명을 사용할 수 없다. 
  • WHERE절 수행 후에 GROUP BY 절이 수행된다. 
-- 포지션 별 평균키 구하기

-- 이렇게 하면 에러난다. 
SELECT POSITION, AVG(HEIGHT)
FROM   PLAYER ;

-- 이렇게 해도 에러난다. (ALIAS 사용 불가)
SELECT    POSITION 포지션, AVG(HEIGHT)
FROM      PLAYER 
GROUP BY  POSITION 포지션;


-- 이렇게 조회해야 한다.
SELECT    POSITION, AVG(HEIGHT)
FROM      PLAYER
GROUP BY  POSITION ;

 

 

HAVING

  • GROUP BY절에 의한 집계 데이터 중, HAVING절에서 제한 조건을 두어 조건을 만족하는 내용만 출력할 수 있다. (GROUP BY의 WHERE절 같은 느낌?)
  • HAVING은 GROUP BY 뒤에 온다. (HAVING이 앞에와도 동일한 결과를 출력하지만, 논리적 순서를 지킬것을 권고한다. )
  • WHERE절은 대상 데이터 개수를 변경하지만, HAVING은 데이터 변경 없이 출력되는 레코드 개수만 변경시킬 수 있다. 
-- 포지션별 평균키를 구하되, 키가 180 이상인 정보만 표시하라.

SELECT    POSITION, ROUND(AVG(HEIGHT),2) 평균키
FROM      PLAYER
GROUP BY  POSITION 
HAVING    AVG(HEIGHT) >= 180 ;

 

 

 

 

 

 

kdata 한국데이터진흥원에서 출간한 SQL 전문가 가이드 2013 Edition을 요약했습니다. 

 

'문송한 회사생활 > SQL 공부' 카테고리의 다른 글

[SQL] SELECT 문장 실행 순서  (0) 2020.08.14
[SQL] ORDER BY  (0) 2020.08.14
[SQL] 집계함수 Aggregate Function  (0) 2020.08.12
[SQL] NULL 관련 함수 (NVL, ISNULL, NULLIF, COALESCE)  (0) 2020.08.12
[SQL] CASE 함수  (0) 2020.08.10