본문 바로가기
DB/Oracle

[Oracle] 오라클 테이블 조회 9 - 다중행 함수, group by, having, sum, avg, max, min, count

by hongdor 2020. 5. 31.
728x90

- 오라클 11g XE 버전입니다

- 오라클 샘플 계정 HR에 접속한 후 진행했습니다 ( 아래 참고 )

https://hongdori2.tistory.com/4

 

 

0. 다중행 함수

 

지금까지는 테이블에서 원하는 복수의 컬럼들을 출력했지만

다중행 함수는 컬럼 중에서 원하는 행 1개만 가져오는 함수입니다.

 

 

1. sum, avg, max, min ,count

 

- 사용할때 : 함수( 컬럼 이름 )

 

sum : 총합계 ( 숫자만 )

avg : 평균 ( 숫자만 )

max : 최대값 ( 숫자, 문자, 날짜 )

min : 최솟값 ( 숫자, 문자, 날짜 ) 

count :  갯수 (숫자, 문자, 날짜 + null 포함 )

 

예시)

> 사람들의 평균 급여는 6461.83178 이다

 

 

2. group by

 

- SQL을 작성할 때 작성 순서입니다

select

from

where

group by

having

order by 

 

> 부서별 총 급여를 알고 싶을 때

select department_id, sum(salary)

from employees;

라고 적으면 에러가 발생합니다. 왜냐하면 department_id는 복수의 행, sum(salary)는 1개의 행을 가지기 때문입니다

이럴 때 group by를 이용합니다.

> department_id 그룹 별로 급여의 합계를 출력할 수 있습니다

 

 

3.  having

 

- SQL을 실행할 때 실행 순서입니다

 

from

where

group by

having

select

order by

 

위 예제에서 만약 부서의 급여가 50000 이상인 것만 출력하기 위해서

select department_id, sum(salary)

from employees

where sum(salary) >= 50000

group by department_id;

라고 적으면 에러가 발생합니다. 왜냐하면 where는 group by보다 먼저 동작하기 때문에 총합으로 더하기 전에 열을 걸러 버리기 때문입니다. 그렇기 때문에

> 다중행 함수의 조건문은 where가 아닌 having을 이용해 적어야 합니다. ( where 절은 개별 컬럼 하나하나에 적용 )

 

 

 

 

 

 

 

 

 

728x90

댓글