Notice
Recent Posts
Recent Comments
Link
나의 개발일지
[SQL] 그룹 함수 본문
그룹 함수의 개념
- 행 집합에 작용하여 그룹 당 하나의 결과를 생성
- 행 집합은 테이블 전체 혹은 WHERE 절의 조건에 의해 선택된 행들이 하나의 그룹
- 선택된 행들에 대하여 하나의 그룹으로 처리되기 때문에 그룹 함수의 결과는 항상 단일 행
- 구문
SELECT group_function(column), ...
FROM table
[WHERE 조건(s)];
그룹 함수의 종류
- COUNT
- MIN
- MAX
- AVG
- SUM
SUM, AVG 함수
- 숫자 데이터를 저장하는 열에 대해 선택된 데이터들의 합계와 평균을 구한다.
- 예) SUM(salary), AVG(salary)
MIN, MAX 함수
- 모든 데이터 타입에 사용 가능
- 선택된 열에 대한 최솟값, 최댓값을 구한다.
- 예) MIN(salary), MAX(salary), MIN(hiredate), MAX(hiredate), MIN(emp_name), MAX(emp_name)
COUNT 함수
- 행의 개수를 반환하는 함수로 세 가지 표현식이 가능
- COUNT(*)
- NULL 값이 있는 행 및 중복 행을 포함
- 테이블에서 SELECT 문의 WHERE 조건을 만족하는 행 수를 반환
- COUNT(expr)
- 열에 NULL이 아닌 행 수를 반환
- COUNT(DISTINCT expr)
- expr로 식별되는 열에서 중복되지 않고 NULL이 아닌 값의 수를 반환
- COUNT(*)
- 예) COUNT(*), COUNT(dept_id), COUNT(DISTINCT dept_id)
그룹 함수와 널값
- COUNT(*)를 제외한 그룹 함수의 결과에 널값은 제외
- 널값이 포함된 행을 그룹 함수 결과에 포함하기 위해 NVL 함수 사용
- 예) AVG(comm), AVG(NVL(comm, 0))
- Y_EMP 테이블의 모든 사원들에 대한 급여의 합계, 평균, 최대 급여, 최소 급여를 표시
SELECT SUM(salary), AVG(salary), MAX(salary), MIN(salary)
FROM y_emp;
- Y_EMP 테이블을 사용하여 가장 오래전에 입사한 사원과 가장 최근에 입사한 사원의 입사일 표시
- 가장 오래전 입사한 사원은 97/06/17로 숫자가 가장 낮음으로 MIN을 사용, 가장 최근은 MAX
SELECT MIN(hiredate), MAX(hiredate)
FROM y_emp;
- COUNT 함수를 실행하여 여러 가지 결과를 비교
- 아직 부서가 NULL인 사원이 있기 때문에 결과에서 COUNT(dept_id)의 값이 COUNT(*) 보다 적게 반환
SELECT COUNT(*), COUNT(dept_id), COUNT(DISTINCT dept_id)
FROM y_emp;
- 첫 번째 평균은 테이블의 모든 행을 기반으로 계산되며, 모든 사원이 받는 커미션 총액을 회사 전체 사원 수로 나눈다.
- 두 번째 평균은 커미션을 받는 사원들만의 평균이다.
SELECT AVG(NVL(comm, 0)), AVG(comm)
FROM y_emp;
'Oracle SQL' 카테고리의 다른 글
[SQL] GROUP BY 절의 추가 기능 (ROLLUP, CUBE, GROUPING SETS) (0) | 2023.04.16 |
---|---|
[SQL] GROUP BY, 그룹 결과 정렬, HAVING 절 (0) | 2023.04.16 |
[SQL] 조건 표현식 (0) | 2023.04.14 |
[SQL] 일반 함수 (0) | 2023.04.14 |
[SQL] 함수의 중첩 (0) | 2023.04.14 |
Comments