반응형
안녕하세요 이번 포스팅에서는 아래 예제를 통해 group by와 having 절 사용 방법에 대해 알아보겠습니다.
0. GROUP BY, HAVING 설명
SELECT GROUP BY에서 지정된 컬럼,
GROUP BY 별로 집계할 값
FROM 테이블
WHERE 조건(집계함수 사용 불가능)
GROUP BY 그룹으로 묶을 컬럼
HAVING 묶은 그룹의 조건(집계함수로 조건 설정 가능)
Q : WHERE 절과 GROUP BY의 HAVING절의 차이는 무엇일까?
A : WHERE 절은 해당 SELECT 쿼리 전체의 조건이고, HAVING 절은 WHERE 조건 이후 그룹화 한 데이터에 조건을 거는 것이다.
추가로 WHERE 절에서는 집계함수를 사용할 수 없으며 HAVING 절에서 사용 가능하다.
SELECT 구문의 순서 : FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY
1. 샘플 데이터 생성
CREATE TABLE sql_test_a
(
ID VARCHAR2(4000 BYTE),
NAME VARCHAR2(200 BYTE),
GROUP_ID VARCHAR2(200 BYTE),
GENDER VARCHAR2(1 BYTE)
);
CREATE TABLE sql_test_b
(
ID VARCHAR2(4000 BYTE)
);
INSERT INTO sql_test_a (ID, NAME, GROUP_ID, GENDER) VALUES ('ID_1', '홍길동', 'G_01', 'M');
INSERT INTO sql_test_a (ID, NAME, GROUP_ID, GENDER) VALUES ('ID_2', '아무개', 'G_01', 'M');
INSERT INTO sql_test_a (ID, NAME, GROUP_ID, GENDER) VALUES ('ID_3', '김철수', 'G_02', 'W');
INSERT INTO sql_test_a (ID, NAME, GROUP_ID, GENDER) VALUES ('ID_4', '김영희', 'G_03', 'W');
INSERT INTO sql_test_a (ID, NAME, GROUP_ID, GENDER) VALUES ('ID_5', '국영수', 'G_03', 'M');
INSERT INTO sql_test_a (ID, NAME, GROUP_ID, GENDER) VALUES ('ID_6', '박서준', 'G_01', 'M');
INSERT INTO sql_test_a (ID, NAME, GROUP_ID, GENDER) VALUES ('ID_7', '아이유', 'G_03', 'W');
INSERT INTO sql_test_a (ID, NAME, GROUP_ID, GENDER) VALUES ('ID_8', '김지원', 'G_03', 'W');
INSERT INTO sql_test_a (ID, NAME, GROUP_ID, GENDER) VALUES ('ID_9', '천우희', 'G_02', 'W');
INSERT INTO sql_test_a (ID, NAME, GROUP_ID, GENDER) VALUES ('ID_10', '안재홍', 'G_03', 'M');
2. 각 GROUP_ID에 속해있는 사람의 수를 조회하기
SELECT GROUP_ID,
COUNT(ID)
FROM sql_test_a
GROUP BY GROUP_ID;
3. 각 GROUP_ID에 속해있는 남자 사람의 수를 조회하기
SELECT GROUP_ID,
COUNT(ID)
FROM sql_test_a
WHERE GENDER = 'M'
GROUP BY GROUP_ID;
4. 남자 사람이 3명 이상인 GROUP_ID를 조회하기
SELECT GROUP_ID,
COUNT(ID)
FROM sql_test_a
WHERE GENDER = 'M'
GROUP BY GROUP_ID
HAVING COUNT(ID) >= 3;
반응형
'DB > Oracle' 카테고리의 다른 글
[Oracle] 다른 계정에 테이블 권한 부여 방법 (0) | 2021.06.02 |
---|---|
[Oracle] oracle 설치 없이 연습할 수 있는 사이트 (0) | 2021.05.28 |
[Oracle] ORDER BY 및 ROWNUM 사용 시 유의점 (0) | 2021.04.20 |
[SQL] prepareStatement 주의점 (0) | 2021.04.14 |
[Oracle] ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 (0) | 2021.03.03 |