주니 개발 도서관

오라클(Oracle)

(2) SQL기초 (HAVING, GROUP BY 절)

주니홍 2022. 7. 4. 13:11

 

해당 테이블을 이용하여 설명

 

일반명령분과 다중행함수를 함께 쓰기

 

SELECT AGE,MAX(SCORE) FROM STUDENT WHERE AGE=22;

일반 명령문 AGE는 1 : 1  출력으로  결과값이 " 여러개 "

다중행함수 MAX() 는 N : 1 출력으로 결과값이 " 1개 "

 

그래서 위 코드를 실행하게 되면 아래의 오류가 발생하게 된다

 

위의 코드를 하나 하나 표현한다면 아래 처럼 표현한다

SELECT AGE FROM STUDENT WHERE AGE=22;
SELECT MAX(SCORE) FROM STUDENT WHERE AGE=22;

 

 

일반명령문과 다중행함수를 한번에 사용하기 위한 키워드가

GROUP BY [칼럼] 이다

SELECT AGE,MAX(SCORE) FROM STUDENT WHERE AGE=22 GROUP BY AGE;

 

GROUP BY 절을 이용하면 일반명령문 AGE라는 칼럼을

GROUPING 하여 다중행함수와 어울릴수 있도록 1개로 묶어준다

 

** 실행순서를 확실히 알아가며 해야한다!

위의 코드의 순서는

FROM  STUDENT

WHERE  AGE = 22

GROUP  BY  AGE 

SELECT  AGE,  SUM(SCORE)

 

1. 테이블을 선택

2. 조건절로 = 22 선택

3. 22값을 가진 AGE를 모두 그룹핑 (GROUPING)

4. 요청한 칼럼값을 화면의 출력

 

 

 

 

조건식에 다중행 함수를 사용해보자

SELECT AGE,SUM(SCORE) FROM STUDENT WHERE SUM(SCORE)>=90 GROUP BY AGE;

WHERE의 조건에 다중행함수 SUM()을 사용해 보았다

해당 오류가 발생하는데,

WHERE에는 다중행함수를 사용할 수 없기 때문입니다

 

 

다중행함수를 이용하기위한 조건절이 따로 있는데

 

HAVING

SELECT AGE,SUM(SCORE) FROM STUDENT WHERE AGE !=24
GROUP BY AGE HAVING SUM(SCORE)>=40 ORDER BY SUM(SCORE) DESC;

(해당 코드는 한줄이다) 수행순서 먼저 보도록 하겠다

FROM STUDENT

WHERE AGE != 24

GROUP BY AGE

HAVING SUM(SCORE) >= 40

SELECT AGE,SUM(SCORE)

ORDER  BY SUM(SCORE) DESC;

 

1. 테이블을 선택

2. 조건절 != 24 는 제외

3. AGE를 그룹핑

4. HAVING 조건 그룹핑한 AGE의 SCORE를 SUM(합쳤을때)

     >= 40이 넘는 것만 해당

5. 2번 / 4번의 조건을 해당하는 AGE,SUM(SCORE) 출력

6. 5번의 출력을 SUM(SCORE) 기준 DESC(내림차순)으로 정렬

의 순서로 이루어 진다

 

 

'오라클(Oracle)' 카테고리의 다른 글

(6) 자바에서 SQL을 이용해 CRUD 표현하기  (0) 2022.07.04
(5) 오라클과 자바를 연동하는 법  (0) 2022.07.04
(4) SQL 기초 (조인 JOIN)  (0) 2022.07.04
(3) SQL기초 (페이징처리)  (0) 2022.07.04
(1) SQL 기초  (0) 2022.07.04