1. 집계함수
- 여러 행들의 그룹이 모여 그룹당 단 하나의 결과를 돌려주는 함수
- GROUP BY 절은 행들을 '소그룹화'한다.
- SELECT 절, HAVING 절, ORDER BY 절에 사용할 수 있다.
집계함수는 그룹에 대한 정보를 제공하므로, 주로 '숫자 유형'에 사용되지만, MAX-MIN-COUNT 함수는 문자/날짜 유형에도 적용이 가능하다.
집계함수의 종류는 아래와 같다.
집계함수 | 사용 목적 |
COUNT(*) | NULL 값을 포함한 행의 수를 출력한다. |
COUNT(표현식) | 표현식의 값이 NULL 값인 것을 제외한 행 수를 출력한다. |
SUM([DISTINCT | ALL] 표현식) | 표현식의 NULL 값을 제외한 합계를 출력한다. |
AVG([DISTINCT | ALL] 표현식) | 표현식의 NULL 값을 제외한 평균을 출력한다. |
MAX([DISTINCT | ALL] 표현식) | 표현식의 최댓값을 출력. 문자, 날짜 데이터 타입도 사용 가능 |
MIN([DISTINCT | ALL] 표현식) | 표현식의 최소값을 출력. 문자, 날짜 데이터 타입도 사용 가능 |
STDDEV([DISTINCT | ALL] 표현식) | 표현식의 표준 편차를 출력 |
VARIANCE/VAR([DISTINCT | ALL] 표현식) | 표현식의 분산 출력 |
기타 통계 함수 | 벤더별로 다양한 통계식을 제공 |
2. GROUP BY 절
- SQL문에서 FROM 절과 WHERE 절 뒤에 오며, 데이터들을 작은 그룹으로 분류해 소그룹에 대한 항목별로 통계 정보를 얻을 때 추가로 사용된다.
SELECT [DISTINCT] 칼럼명 [ALIAS 명]
FROM 테이블명
[WHERE 조건식]
[GROUP BY 칼럼 or 표현식]
[HAVING 그룹조건식];
사용 예시는 아래와 같다.
SELECT POS AS 포지션, COUNT (*) AS 인원수, COUNT(HEIGHT) AS 키대상,
MAX(HEIGHT) AS 최대키, MIN(HEIGHT) AS 최소키, ROUND(AVG(HEIGHT), 2) AS 평균키
FROM PLAYER
GROUP BY POS;
3. HAVING 절
- WHERE 절은 FROM 절에 정의된 집합의 개별 행에 WHERE절의 조건절이 먼저 적용되고, 조건에 맞는 행이 GROUP BY 절의 대상이 된다.
이 다음 결과 집합의 행에 HAVING 조건절이 적용된다. 단, HAVING 절은 '결과 집합의 행'에 조건이 적용된다는 점에 유의하자.
SELECT POS AS 포지션, AVG(HEIGHT) AS 평균키
FROM PLAYER
GROUP BY POS
HAVING AVG(HEIGHT)>=180;
GROUP BY절과 HAVING 절의 순서가 바뀌면 ORACLE에서는 문제가 안되나, SQL Server에서는 문법오류가 발생하니 유의할 것.
4. 집계함수와 NULL 처리
- 집계함수는 NULL을 알아서 처리하는데, 괜히 NVL/ISNULL 써서 NULL을 억지로 수정하면 나중에 문제가 발생한다.
- 리포트 출력 때 NULL이 아닌 0을 표시하고 싶을 경우에는 NVL(SUM(SAL), 0)이나, ISNULL(SUM(SAL),0)처럼 전체 SUM의 결과가 NULL인 경우에만 한번 NVL, ISNULL 함수를 사용하면 된다.
'SQLD' 카테고리의 다른 글
2-1-7. 조인 (1) | 2022.09.20 |
---|---|
2-1-6. ORDER BY 절 (1) | 2022.09.20 |
2-1-4. WHERE 절 (0) | 2022.09.20 |
2-1-3. 함수 (0) | 2022.09.20 |
2-1-2. SELECT 문 (0) | 2022.09.20 |