DB

[SQL] GROUP BY절, HAVING 절

초코파이쩡 2023. 3. 23. 09:44
반응형

GROUP BY 절

  1. GROUP BY 절은 SQL 문에서 FROM 절과 WHERE 절 뒤에 오며 GROUP BY 절은 행들을 소그룹화 한다.
  2. 데이터들을 작은 그룹으로 분류하여 소그룹에 대한 항목별로 통계 정보를 얻을 때 추가로 사용된다
  3. GROUP BY 절과 HAVING 절은 다음과 같은 특성을 가진다.
- GROUP BY 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계 함 수를 사용한다.
- GROUP BY GROUP BY 절에서는 SELECT 절과는 달리 칼럼 ALIAS 명을 사용할 수 없다.
 - WHERE 절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제 거시킨다.
 - GROUP BY 절과 HAVING 절의 순서를 바꾸더라도 문법 에러가 없고 결과물도 동일한 결과를 출력한다. 그렇지만, 논리적으로 GROUP BY 절 149 결과물도 동일한 결과를 출력한다. 그렇지만, 논리적으로 GROUP BY 절 과 HAVING 절의 순서를 지키는 것을 권고한다

 

GROUP BY 절

  • GROUP BY 절과 HAVING 절은 다음과 같은 특성을 가진다.
  •  집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행한다.
  • HAVING 절은 GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시할 수 있다. 
  • 집계 함수는 WHERE 절에는 올 수 없다. 
  • GROUP BY 절에 의한 소그룹별로 만들어진 집계 데이터 중, HAVING 절에서 제한 조건을 두어 조건을 만족하는 내용만 출력한다.
  • 일부 데이터베이스의 과거 버전에서는 데이터베이스가 GROUP BY 절 에 명시된 칼럼(Column)의 순서대로 오름차순 정렬을 자동으로 실시하 는 경우가 있었으나, 지금은 정렬을 위해서는 뒤에서 언급할 ORDER BY 절을 명시해야 정렬이 수행된다 .

 

GROUP BY 절 예제

-  포지션별 최대키, 최소키, 평균키를 출력한다. (포지션별이란 소그 룹 조건을 제시하였기 때문에 GROUP BY 절을 사용한다)

SELECT POSITION 포지션, COUNT(*) 인원수, COUNT(HEIGHT) 키대상,
MAX(HEIGHT) MAX(HEIGHT) 최대키, MIN(HEIGHT) MIN(HEIGHT) 최소키, ROUND(AVG(HEIGHT) 2) ROUND(AVG(HEIGHT),2) 평균키
FROM PLAYER
GROUP BY POSITION;
  • GROUP BY 절에서 그룹 단위를 표시해 주어야 SELECT 절에서 그룹 단위 의 칼럼과 집계 함수를 사용할 수 있다. 
  • 칼럼에 대한 ALIAS는 SELECT 절에서 정의하고 ORDER BY 절에서는 재활 용할 수 있지만, GROUP BY 절에서는 ALIAS 명을 사용할 수 없다.

HAVING 절

  • WHERE 절에서는 집계함수 사용할 수 없다.
  • HAVING 절은 집계함수를 가지고 조건비교를 할 때 사용된다.
  • HAVING절은 GROUP BY절과 함께 사용된다.

 

HAVING 절 예제

  • HAVING 절은 WHERE 절과 비슷하지만 GROUP BY절에 의해 만들어진 소그룹에 대한 조건이 적용된다는 점에서 차이가 있다.
  • HAVING 조건절에는 GROUP BY 절에서 정의한 소그룹의 집계 함수를 이용 한 조건을 표시할 수 있으므로, HAVING 절을 이용해 평균키가 180 센티미터 이상 인 정보만 표시한다.
SELECT POSITION 포지션, ROUND(AVG(HEIGHT),2) 평균키
FROM PLAYER FROM PLAYER
GROUP BY POSITION
HAVING AVG(HEIGHT) >= 180;


포지션    평균키
  GK     186.26
  DF     180.21
 153

2개의 행이 선택되었다.

 


집계함수
- SELECT, HAVING, ORDERBY 절에 사용할 수 있다.
- 여러 행들의 그룹이 모여 그룹당 단 하나의 결과를 돌려주는 함수
- 테이블 전체 집계를 위하여 GROUP BY 절 없이도 함수 사용이 가능 하다.


출처: 한국데이터베이스 진흥원

반응형

'DB' 카테고리의 다른 글

[SQL] Oracle Developer 테이블 여러개 열기  (0) 2023.03.24
[SQL] 조건문 DECODE  (0) 2023.03.23
[SQL] COUNT(카운트)  (0) 2023.03.21
[sql] WHERE 절 문법  (0) 2023.03.14
[SQL] 오라클 정렬 sort (order by 절 사용법)  (0) 2023.03.14