본문 바로가기
Category/정보처리기사

GROUP BY와 HAVING에 대한 설명

by Corinee 2024. 10. 10.
728x90
반응형

1. GROUP BY

GROUP BY는 SQL에서 행(row)을 그룹화하기 위한 절입니다. 특정 컬럼을 기준으로 데이터를 묶어 집계함수(예: SUM, COUNT, AVG, MIN, MAX)를 사용하여 그룹별 통계를 낼 때 사용합니다.

GROUP BY의 역할:

  • 특정 컬럼을 기준으로 데이터를 묶는다: 예를 들어, 학생들의 성적 테이블에서 과목 이름을 기준으로 그룹을 만들고, 각 과목별 평균 점수를 계산할 수 있습니다.
  • 집계 함수와 함께 사용: GROUP BY는 주로 집계 함수(SUM, COUNT, MIN, MAX, AVG)와 함께 사용됩니다. 그룹화된 각 그룹에 대해 집계 함수가 적용됩니다.

GROUP BY 예시:

예를 들어, 성적 테이블에서 과목별로 평균 점수를 계산한다고 할 때:

SELECT 과목이름, AVG(점수) AS 평균점수
FROM 성적테이블
GROUP BY 과목이름;

설명:

  • 과목이름을 기준으로 데이터를 그룹화합니다.
  • 과목별로 점수의 평균을 계산하여 평균점수로 출력합니다.

HAVING

HAVING은 그룹화된 데이터에 조건을 걸 때 사용되는 절입니다. WHERE는 개별 행에 대한 조건을 필터링하는 데 사용되는 반면, HAVING은 그룹화된 데이터에 대한 조건을 지정할 때 사용됩니다. 즉, 집계 함수의 결과에 조건을 걸 때 사용합니다.

HAVING의 역할:

  • GROUP BY에 의해 그룹화된 결과에서 특정 조건을 만족하는 그룹만 출력할 때 사용됩니다.
  • 집계 함수를 포함한 조건을 적용할 수 있습니다. 예를 들어, 평균 점수가 80 이상인 과목만 출력할 수 있습니다.

HAVING 예시:

위의 예시에서 평균 점수가 80 이상인 과목만 출력하려면 HAVING을 사용해야 합니다:

SELECT 과목이름, AVG(점수) AS 평균점수
FROM 성적테이블
GROUP BY 과목이름
HAVING AVG(점수) >= 80;

설명:

  • GROUP BY로 과목별로 데이터를 그룹화합니다.
  • 각 그룹에서 평균 점수를 계산한 후, AVG(점수) >= 80인 과목만 출력합니다.

GROUP BY와 HAVING의 차이점

  • GROUP BY는 데이터를 그룹화하여 각 그룹에 대해 집계 함수를 사용할 수 있게 합니다.
  • HAVING그룹화된 데이터에 조건을 걸 때 사용합니다. 집계 함수의 결과에 조건을 적용할 때 필수적으로 사용됩니다.
  • WHERE와 달리, HAVING은 집계 함수가 포함된 조건을 처리할 수 있습니다.

GROUP BY와 HAVING의 예제

다음은 과목별로 최소 점수와 최대 점수를 구하고, 특정 조건을 만족하는 과목만을 출력하는 예시입니다:

SQL 예시:

SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수
FROM 성적테이블
GROUP BY 과목이름
HAVING MIN(점수) >= 85;

설명:

  • GROUP BY 과목이름: 과목이름을 기준으로 데이터를 그룹화합니다.
  • MIN(점수) AS 최소점수, MAX(점수) AS 최대점수: 각 그룹(과목)에 대해 최소 점수와 최대 점수를 계산합니다.
  • HAVING MIN(점수) >= 85: 최소 점수가 85 이상인 과목만 출력합니다.

GROUP BY와 HAVING의 결합 구조

  1. GROUP BY: 데이터를 그룹화합니다.
  2. 집계 함수: 각 그룹에 대해 집계 함수를 사용해 계산을 수행합니다.
  3. HAVING: 집계 결과에 대해 조건을 적용하여 특정 그룹을 필터링합니다.

요약

  • GROUP BY: 데이터를 그룹화하는 데 사용되며, 주로 집계 함수와 함께 사용됩니다.
  • HAVING: 집계된 결과에 조건을 걸 때 사용됩니다. 즉, 그룹화된 데이터에서 조건을 설정하여 특정 조건을 만족하는 그룹만 필터링합니다.
  • WHERE는 개별 행에 대해 조건을 걸지만, HAVING은 그룹화된 결과에 조건을 설정할 때 사용됩니다.