[Oracle] GROUP BY , HAVING 사용 예

2019. 12. 1. 17:05개발/기타

 

1. 데이터 준비


아래의 쿼리문에 따라 테이블에 데이터를 채운다. 2019년 1월,2월 매장별 매출 데이터를 만들었다.

  • YYYYMM : 년월
  • STORE_NM : 가게이름
  • EARN : 매출
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE STORE_EARN_MM
   YYYYMM VARCHAR2 (8 BYTE), 
   STORE_NM VARCHAR2 (200 BYTE), 
   EARN  VARCHAR2(200 BYTE) 
); 
 
INSERT INTO STORE_EARN_MM (YYYYMM, STORE_NM, EARN) VALUES ('201901''A''1000'); 
INSERT INTO STORE_EARN_MM (YYYYMM, STORE_NM, EARN) VALUES ('201901''B''1100'); 
INSERT INTO STORE_EARN_MM (YYYYMM, STORE_NM, EARN) VALUES ('201901''C''1200'); 
 
INSERT INTO STORE_EARN_MM (YYYYMM, STORE_NM, EARN) VALUES ('201902''A''200'); 
INSERT INTO STORE_EARN_MM (YYYYMM, STORE_NM, EARN) VALUES ('201902''B''300'); 
INSERT INTO STORE_EARN_MM (YYYYMM, STORE_NM, EARN) VALUES ('201902''C''400');

 

데이터 확인

YYYYMM STORE_NM EARN
201901 A 1000
201901 B 1100
201901 C 1200
201902 A 200
201902 B 300
201902 C 400

 

 


2. GROUP BY절을 이용한 매장별 매출


 현재 테이블에 존재하는 매장은 A,B,C 밖에 없기 때문에 매장이름으로 그룹화를 하면 A,B,C만 나오게 된다.

매장별로 그룹핑을 한다음 SUM(EARN)을 통해서 매장별 EARN의 총 합을 구한다.

 

- GROUP BY절 쓰면서 주의해야할 사항

 현재 GROUP BY에는 STORE_NM만 있는데 이렇게 되면 STORE_NM을 제외한 다른 컬럼들은 집계함수로만 select문에 등장할 수 있다. 아래 코드 SUM(EARN)에서 SUM 함수를 제거하고 EARN만 넣으면 ORA-00979: not a GROUP BY expression가 발생한다.

 
1
2
3
4
SELECT STORE_NM,SUM(EARN)
FROM STORE_EARN_MM
GROUP BY STORE_NM;
 

 

결과

STORE_NM SUM(EARN)
A 1200
B 1400
C 1600

 


3. HAVING을 이용한 집계함수 조건걸기


 select문에서 집계함수를 사용하고, 조건을 걸어서 조회해야 할때가 있다. where 절에는 집계함수를 사용할 수 없기 때문에 having을 이용해야한다. 

 

SUM(EARN) 값이 1200이 넘는 row만 출력한다.

1
2
3
4
5
SELECT STORE_NM,SUM(EARN)
FROM STORE_EARN_MM
GROUP BY STORE_NM
HAVING SUM(EARN) > '1200';
 

 

결과

STORE_NM SUM(EARN)
B 1400
C 1600

'개발 > 기타' 카테고리의 다른 글

MyBatis 사용 예제 ( feat. Spring Boot , MariaDB )  (0) 2020.08.22
Anaconda에서 자주 사용하는 명령어  (0) 2020.04.11
[Django] 프로젝트 폴더 생성하기  (0) 2020.02.02
[PL/SQL] 값 입력받기  (0) 2019.12.22
RabbitMQ 기초  (0) 2019.01.31