[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 |