본문 바로가기
Database/Oracle

[Oracle] 4.Group by / Having

by tangle96 2021. 6. 4.

1.Group by

Group by를 사용하기 전에 그룹 함수에 대해 알아보자.

 

함께 쓰이는 녀석이다.

 

SUM, AVG, MIN, MAX, COUNT 요 녀석들이다.

 

예제를 통해 간단하게 GROUP BY를 분석해보자

 

Q1. 직업별로 평균급여의 데이터를 출력하고 싶다.

 

그럼 SELECT문에서 JOB, 그리고 그룹함수에 원하는 컬럼명을 ( ) 괄호로 쳐준다

 

SELECT JOB,AVG(SALARY)

 

그다음 EMPLOYEE에서 불러와야하니 FROM EMPLOYEE

 

그리고 GROUP BY를 통해 JOB을 그룹으로 묶어준다고 생각하자.

 

여기서 중요한 점은 그룹함수 AVG(SALARY)를 GROUP BY에 묶지 않는 것이고

 

그렇다면 그룹 함수를 제외하면 SELECT에 추출하고자 하는 컬럼명은 똑같이 GROUP BY 뒤에 위치하는 것이다.

 

SELECT JOB,AVG(SALARY) FROM EMPLOYEE GROUP BY JOB;

 

각 직업별로 평균 급여가 출력 되었다.

꼭 직업 말고 다른 컬럼과 그룹을 지어 출력하여도 된다.

 

여기서 핵심은 그룹함수의 적절한 사용과 Where절의 비사용이다, Where은 조건인데

 

Group by에서도 조건을 사용하고 싶을 것 아닌가?

 

직업별로 평균급여의 데이터를 출력하고 싶은 욕구에서 이제는

 

직업별로 평균급여의 데이터중에서 3000급여 이상의 = 데이터를 얻고싶다

 

가장 높은 급여라는 조건이 추가되었다.

 

이때 Group by의 조건을 설정 할 수 있는 HAVING이다.

 

SELECT JOB,AVG(SALARY) FROM EMPLOYEE GROUP BY JOB HAVING AVG(SALARY) >= 3000;

 

 

HAVING 뒤에 셀렉문에 쓴 AVG(SALARY)를 사용할 수 있는 것이다.

 

다시 쿼리문의 의미를 재해석 하자면

 

select '컬럼명A' 그룹함수 ( 컬럼명B ) from emoloyee group by '컬럼명A' Having 그룹함수(컬럼명B) + 조건 ;

 

으로 정리됩니다!.

 

'Database > Oracle' 카테고리의 다른 글

[Oracle] 6. 다양한 함수  (0) 2021.06.07
[Oracle] 5.Order by  (0) 2021.06.07
[Oracle] 3-1. Where  (0) 2021.06.04
[Oracle] 3.Where 절 (조건)  (0) 2021.06.03
[Oracle] 2. Schema 작업과 별칭, DISTINCT(중복 제거)  (0) 2021.06.03

댓글