다중행 함수
여러 행을 바탕으로 하나의 결과 값을 도출해내기 위해 사용하는 함수
하나의 행으로 결과를 출력하는 특징을 갖고 있기에 다중행 함수를 사용한 SELECT절에는 기본적으로 여러 행이 결과로 나올 수 있는 열을 함께 사용할 수 없음
ORA-00937: 단일 그룹의 그룹 함수가 아닙니다
본 오류는 SELECT절에 (1)다중행 함수를 사용하여 결과 값이 한 행으로 나온 데이터(SUM(SAL)와
(2)여러 행이 나올 수 있는 데이터(ENAME)를 함께 명시했을 때 발생함
다중행 함수의 종류 | 설명 |
SUM | 지정한 데이터의 합 반환 |
COUNT | 지정한 데이터의 개수 반환 |
MAX | 지정한 데이터 중 최댓값 반환 |
MIN | 지정한 데이터 중 최솟값 반환 |
AVG | 지정한 데이터의 평균값 반환 |
1. SUM 함수
합계를 구할 데이터를 지정함, NULL 데이터를 제외하고 합계를 구함
DISTINCT를 지정하면 같은 결과 값을 가진 데이터는 합계에서 한번만 사용됨 = 중복 데이터를 제외하고 계산함
기본 형식 | SUM(DISTINCT 혹은 ALL (선택, 기본값: ALL), 합계를 구할 열이나 연산자, 함수를 사용한 데이터) OVER(분석을 위한 여러 문법을 지정(선택)) |
2. COUNT 함수
결과 행의 개수를 출력함, NULL 데이터는 제외하고 개수를 구함
COUNT 함수에 *을 사용하면 SELECT문의 결과 값으로 나온 행 데이터의 개수를 반환해 줌
WHERE절의 조건식을 함께 사용하면 특정 조건을 만족하는 데이터 출력할 수 있음
기본 형식 | COUNT(DISTINCT 혹은 ALL (선택, 기본값: ALL), 개수를 구할 열이나 연산자, 함수를 사용한 데이터) OVER(분석을 위한 여러 문법을 지정(선택)) |
NULL 데이터는 반환 개수에서 제외되기 때문에 아래 두 질의의 결과는 같음
3. MAX, MIN 함수
MAX: 결과 행에서 최댓값을 출력함
MIN: 결과 행에서 최솟값을 출력함
숫자, 날짜, 문자 데이터의 크기 비교 가능
기본 형식 | MAX(DISTINCT 혹은 ALL (선택, 기본값: ALL), 최댓값을 구할 열이나 연산자, 함수를 사용한 데이터) OVER(분석을 위한 여러 문법을 지정(선택)) |
기본 형식 | MIN(DISTINCT 혹은 ALL (선택, 기본값: ALL), 최솟값을 구할 열이나 연산자, 함수를 사용한 데이터) OVER(분석을 위한 여러 문법을 지정(선택)) |
4. AVG 함수
결과 행의 평균 값을 반환함, NULL 데이터는 제외하고 평균을 구함
숫자 또는 숫자로 암시적 형 변환이 가능한 데이터만 사용할 수 있음
기본 형식 | AVG(DISTINCT 혹은 ALL (선택, 기본값: ALL), 평균 값을 구할 열이나 연산자, 함수를 사용한 데이터) OVER(분석을 위한 여러 문법을 지정(선택)) |
GROUP BY절
그룹화: 여러 데이터에서 의미 있는 하나의 결과를 특정 열 값별로 묶어서 출력함
SELECT문에서 GROUP BY절을 작성하여 데이터를 그룹화할 수 있음
GROUP BY절에는 명시하는 열을 여러 개 지정할 수 있음 (먼저 지정한 열: 대그룹 → 그 다음 지정한 열: 소그룹으로 나눔)
별칭은 인식되지 않기에 열 이름이나 연산식을 그대로 지정해 주어야 함
기본 형식 | SELECT 조회할 열1 이름, 열2 이름, ... 열N 이름 FROM 조회할 테이블 이름 WHERE 조회할 행을 선별하는 조건식 GROUP BY 그룹화할 열을 지정(여러 개 지정 가능) ORDER BY 정렬하려는 열 지정 |
GOURP BY절을 사용해 출력 데이터를 그룹화할 때 유의할 점은
다중행 함수를 사용하지 않은 일반 열을 GROUP BY절에 명시하지 않으면 SELECT절에서 사용할 수 없다는 점임
아래 상황에서 DEPTNO열과 AVG(SAL)열은 한 행으로 출력되지만, ENAME 열은 여러 행으로 구성되어 각 열별 데이터 수가 달라져 출력이 불가함
ORA-00979: GROUP BY 표현식이 아닙니다.
본 오류는 ENAME도 GROUP BY절에 포함시키면 해결됨
즉 GROUP BY절을 사용한 그룹화는 그룹화된 열 외에 일반 열을 SELECT절에 명시할 수 없다는 점을 반드시 기억해야 함
HAVING절
SELECT문에 GROUP BY절이 존재할 때만 사용할 수 있음
GROUP BY절을 통해 그룹화된 결과 중 출력 그룹을 선별하는 조건식을 지정함
별칭은 사용할 수 없음
기본 형식 | SELECT 조회할 열1 이름, 열2 이름, ... 열N 이름 FROM 조회할 테이블 이름 WHERE 조회할 행을 선별하는 조건식 GROUP BY 그룹화할 열을 지정(여러 개 지정 가능) HAVING 출력 그룹을 제한하는 조건식 ORDER BY 정렬하려는 열 지정 |
조건식을 지정하고 참인 결과만 출력한다는 점에서 HAVING절은 WHERE절과 비슷하다고 볼 수 있음
하지만 WHERE절은 출력 대상 행을 제한하는데, HAVING절은 그룹화된 대상을 출력에서 제한하는데 쓰임
둘의 쓰임새가 전혀 다르다는 점을 기억해야 함
아래의 경우 WHERE절을 추가한 SELECT문에서는 10번 부서의 PRESIDENT 데이터가 출력되지 않음
이는 WHERE절이 GROUP BY절과 HAVING절을 사용한 데이터 그룹화보다 먼저 출력 대상이 될 행을 제한하기 때문임
참고 도서: https://www.yes24.com/Product/Goods/65849798
Do it! 오라클로 배우는 데이터베이스 입문 - 예스24
기본기가 무엇보다 중요한 데이터베이스처음 공부할 때 탄탄한 기본기를 쌓자!데이터베이스는 탄탄한 기본기를 쌓아야만 실무에서 어려운 SQL문을 만나도 흔들리지 않는다. 『Do it! 오라클로 배
www.yes24.com
'데이터베이스 > Oracle' 카테고리의 다른 글
8-1 조인 (0) | 2024.02.01 |
---|---|
7-2 그룹화와 관련된 여러 함수 (0) | 2024.01.27 |
6-4 DECODE 함수와 CASE문 (3) | 2024.01.24 |
6-3 형 변환 함수와 NULL 처리 함수 (0) | 2024.01.24 |
6-2 숫자 함수와 날짜 함수 (0) | 2024.01.18 |