테이블의 각 열에 대한 계산이 필요할 때 사용하는 것이 집합 함수이다.
그리고 특정 그룹에 대한 연산이 필요할 때 사용하는 것이 GROUP BY이다.
그룹에 조건을 줄 때는 WHERE절이 아닌, HAVING절을 이용한다.
1. 집합 함수
집합 함수는 테이블의 각 열에 대한 계산이 필요할 때 사용된다.
COUNT
행의 개수를 반환한다.
* 테이블 전체 행의 개수를 알고 싶을 때 사용하기도 하고,
* 집합의 개수,
* 조건절의 개수 등 원하는 행의 개수를 확인 할 수 있어서 매우 유용하게 사용된다!
MAX
컬럼의 최대값을 반환한다.
* 페이징 기법에서 사용되기도 한다.
마지막 값에서 +1 을 하면 자동으로 값을 증가 시킬 수 있다.
SQUENCE의 대체 방법으로 사용된다.
MIN
컬럼의 최소값을 반환한다.
SUM
컬럼 값의 합계를 반환한다.
예) 월급의 합계, 매출의 합계, 수량의 합계
AVG
행의 개수를 반환한다. 테이블 전체 행의 개수를 알고 싶을 때 사용하기도 하고,
예) 월급의 평균, 수량의 평균, 평균온도
2. GROUP BY
같은 속성값끼리 그룹을 만들 수 있다.
( 지난번에 만들었던 과일가게 테이블을 활용해보도록 하겠다. )
예제1)
같은 월에 입고된 과일은 몇 건인지 구하라.
해설)
1.같은 월을 계산하기 위해 SUBSTR 함수로 월별로 추출했다.
SUBSTR(stardate,4,2) > stardate 값의 앞에서부터 4번째의 2글자를 추출하라.
22/07/08 형태에서 앞에서 부터 4번째 글자인 0부터 두글자니깐 '07'의 형태로 추출된다.
2.행의 개수를 반환하기 위해 COUNT(*) 집합함수를 사용했다.
3. 같은 월별로 그룹을 주어야 하기 때문에 SUBSTR(stardate,4,2) 입력한다.
결과)
5월에 2건
6월에 4건
7월에 3건
으로 확인되었다.
예제2)
수량이 같은 과일의 개수와 가격의 합계를 구하라.
"수량이 같은" : 그룹 group by sea
"개수" : count(*)
"가격의 합계" : sum(price)
그룹을 주고 출력할 때 주의할 점이 있다.
SELECT 절에 집합함수를 사용할 때는 단일컬럼, 단일행 함수를 함께 사용할 수 없다!
SELECT 절에는 오직
* 그룹으로 사용할 컬럼
* 집합 함수
만 사용 가능하다.
이렇게 단일 컬럼인 name을 같이 출력 하려고 하면 오류가 뜬다.
3. HAVING
그룹에 조건을 줄 때 사용한다.
HAVING 절은 반드시 GROUP BY 와 함께 사용되며,
GROUP BY에 조건을 줄 때는 WHERE이 아닌 HAVING만 사용 가능하다.
예제1)
같은 월에 입고된 과일은 몇 건인지 구하라. 단, 3건 이상인 경우만 출력하라.
5월에 2건 있었던 부분은 제외하고 출력되었다.
예제2)
수량이 같은 과일의 개수와 가격의 합계를 구하라.
단, 수량이 2개 이상인 과일만 출력하시오.
"수량이 같은" : 그룹 group by sea
"개수" : count(*)
"가격의 합계" : sum(price)
"수량이 2개 이상" : 그룹조건 having count(*)>=2
HAVING 절은 그룹으로 묶인 컬럼의 조건을 나타낸다!
그룹으로 묶고,
그룹의 조건을 주는 것은
어렵지 않지만!
그룹을 사용하면
SELECT 절에
단일컬럼, 단일행 함수는
사용할 수 없다는 것을 꼭 기억하자.
'Oracle' 카테고리의 다른 글
[DB/오라클] 조인 완벽 정리 ( INNER 조인 OUTER 조인 ) (0) | 2022.07.09 |
---|---|
[DB/오라클] 오라클 데이터형 (문자형,숫자형,날짜형) (1) | 2022.07.08 |
[DB/오라클] TRIGGER 데이터 자동 변경/갱신 트리거 (0) | 2022.07.03 |
[DB/오라클] INSERT INTO 직접 만든 테이블에 테이터 삽입하기 (0) | 2022.07.01 |
[DB/오라클] CREATE TABLE 같이 테이블 생성해 보아요 (primary key, foreign key, check) (0) | 2022.06.30 |