그룹 조회

그룹 조회

이 문서에서는 그룹 조회를 사용하여 데이터를 원하는 기준으로 묶어서 조회하는 방법에 대해서 살펴본다.

샘플 데이터

샘플 데이터는 기존과 동일하게 product를 사용한다.

table product

번호 (no)

이름 (name)

종류 (type)

가격 (price)

제조일 (made)

유통기한 (expire)

1

스크류바

아이스크림

1200

2020-05-01

2020-10-01

2

마이쮸

사탕

900

2020-01-01

2021-01-01

3

초코파이

과자

3000

2020-02-01

2020-10-20

4

맛동산

과자

2200

2020-01-05

2020-04-05

5

참이슬

주류

1000

2020-01-01

2020-07-01

6

처음처럼

주류

1000

2020-03-15

2020-08-15

7

바나나킥

과자

1500

2020-05-03

2020-06-03

8

빠삐코

아이스크림

1000

2019-12-01

2020-06-01

9

멘토스

사탕

1200

2020-03-20

2020-12-31

10

오레오

과자

2100

2019-06-01

2020-06-01

생성 구문은 다음과 같다.

create table product(
no number primary key,
name varchar2(30) not null,
type varchar2(15) check(type in ('과자','아이스크림','주류','사탕')),
price number,
made date,
expire date
);

insert into product values(1, '스크류바', '아이스크림', 1200, '2020-05-01', '2020-10-01');
insert into product values(2, '마이쮸', '사탕', 900, '2020-01-01', '2021-01-01');
insert into product values(3, '초코파이', '과자', 3000, '2020-01-01', '2021-01-01');
insert into product values(4, '맛동산', '과자', 2200, '2020-02-01', '2020-10-20');
insert into product values(5, '참이슬', '주류', 1000, '2020-01-05', '2020-04-05');
insert into product values(6, '처음처럼', '주류', 1000, '2020-03-15', '2020-08-15');
insert into product values(7, '바나나킥', '과자', 1500, '2020-05-03', '2020-06-03');
insert into product values(8, '빠삐코', '아이스크림', 1000, '2019-12-01', '2020-06-01');
insert into product values(9, '멘토스', '사탕', 1200, '2020-03-20', '2020-12-31');
insert into product values(10, '오레오', '과자', 2100, '2019-06-01', '2020-06-01');

commit;

그룹화

샘플 데이터들을 그룹으로 묶을 수 있는 방법은 여러 가지가 있다.

  1. 종류(type)별로 구분

  2. 제조일자(made) 중에서 연도별/월별로 구분

  3. 유통기한(expire) 중에서 연도별/월별로 구분

  4. 가격(price)을 천원 단위로 구분

이외에도 원하는 방법에 따라 다양하게 그룹화 할 수 있으며, 2,3,4번처럼 항목 값으로 바로 그룹이 되지 않고 계산이 필요한 경우는 코드가 조금 더 복잡해진다.

종류별로 그룹 조회

종류(type)를 이용하여 group을 하기 위한 과정은 다음과 같다.

우선 그룹화에 앞서 항목을 먼저 조회한다.

select type from product;

type

아이스크림

사탕

과자

과자

주류

주류

과자

아이스크림

사탕

과자

조회된 항목들을 보면 중복되는 요소들이 있으며, 중복 제거(distinct)가 아닌 그룹화를 통해 데이터를 묶을 수 있다.

select type from product group by type;

group by type 키워드를 통해 type을 기준으로 묶어주며, 다음과 같은 결과가 조회되는 것을 확인할 수 있다.

type

아이스크림

사탕

과자

주류

이렇게 그룹으로 묶인 상태에서 집계 함수를 통하여 원하는 항목을 그룹에 추가하여 확인할 수 있다.

select type "분류", sum(price) "합계" from product group by type;

분류

합계

아이스크림

8800

사탕

2100

과자

2200

주류

2000

select type "분류", count(*) "개수" from product group by type;

분류

개수

아이스크림

2

사탕

2

과자

4

주류

2

이 외에도 avg, min, max 등을 사용할 수 있다.

그룹 조건

그룹을 만들 때 조건을 설정할 수 있다. 이는 WHERE 조건과는 다르며 그룹의 생성 여부에 영향을 미친다.

다음 구문은 분류별 개수가 3개 이상인 그룹을 조회한다.

select type "분류", count(*) "개수" from product group by type having count(*) >= 3;

분류

개수

과자

4

group만 수행했을 때와 다르게 주류, 사탕, 아이스크림은 기준이 충족되지 않아 그룹으로 설정되지 않았음을 알 수 있다.

그룹 함수

오라클 내장 함수 의 그룹 함수 부분을 참조한다.

오라클 내장 함수

Last updated