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의 결합 구조
- GROUP BY: 데이터를 그룹화합니다.
- 집계 함수: 각 그룹에 대해 집계 함수를 사용해 계산을 수행합니다.
- HAVING: 집계 결과에 대해 조건을 적용하여 특정 그룹을 필터링합니다.
요약
- GROUP BY: 데이터를 그룹화하는 데 사용되며, 주로 집계 함수와 함께 사용됩니다.
- HAVING: 집계된 결과에 조건을 걸 때 사용됩니다. 즉, 그룹화된 데이터에서 조건을 설정하여 특정 조건을 만족하는 그룹만 필터링합니다.
- WHERE는 개별 행에 대해 조건을 걸지만, HAVING은 그룹화된 결과에 조건을 설정할 때 사용됩니다.
'Category > 정보처리기사' 카테고리의 다른 글
| 형상 관리(Configuration Management)란? (1) | 2024.10.10 |
|---|---|
| SSO(Single Sign-On)란? (1) | 2024.10.10 |
| 상속 관계에서 생성자 호출 순서 (0) | 2024.10.10 |
| 이진수를 십진수로 변환하는 방법 (0) | 2024.10.10 |
| 포트 번호란? (1) | 2024.10.10 |