본문 바로가기

개발자노트/DBMS

[SQL] [오라클] 문법 - GROUP BY / HAVING

 

GROUP

- 데이터를 특정 attribute로 묶어서 출력 하고 싶을때

SELECT AGE FROM STUDENT WHERE AGE=22; -- 22살인 사람의 정보
SELECT MAX(SCORE) FROM STUDENT AGE=22;
-- 이렇게한다면 나이 22살인 사람이 여러명이게 되면 명확한 대상을 몰라 값을 꺼내 올 수 없다.
-- 이 때 사용하는 것이 GROUP BY절 : 데이터를 GROUPING 하여 출력
SELECT AGE,MAX(SCORE) FROM STUDENT WHERE AGE=22 GROUP BY AGE;
 -- 실행 순서는 다음과 같다
 WHERE AGE=22		   -- 4 : 화면에 요청한 컬럼값을 출력한다.
 SELECT AGE,MAX(SCORE) -- 1 : 테이블 선택
 FROM STUDENT 		   -- 2 : 조건절
 GROUP BY AGE;		   -- 3 : 선택 당한 데이터들을 그루핑 할 수 있다.

HAVING

그룹함수에 대한 조건을 줄 때 사용

SELECT AGE,SUM(SCORE) FROM STUDENT GROUP BY AGE HAVING SUM(SCORE)>=90;
-- 그룹 함수를 사용하여 조건을 줄 때는 WHERE절을 사용하지 않고 
-- HAVING절 을 사용한다.


-- HAVING절 + 조건절
SELECT AGE,SUM(SCORE) FROM STUDENT WHERE AGE!=24 GROUP BY AGE HAVING SUM(SCORE)>=40;
 -- 조건절도 같이 사용 가능
 SELECT AGE,SUM(SCORE) --5
 FROM STUDENT -- 1
 WHERE AGE!=24 -- 2
 GROUP BY AGE -- 3
 HAVING SUM(SCORE)>=0 -- 4 : GROUPING이 먼저 진행이 완료된 상황
 ORDER BY SUM(SCORE) ASC; -- 6
 -- ★ 실행 순서 매우 중요 !!