-- 그룹함수 : 하나의 행의 컬럼을 대상이 아닌 행의 그룹의 컬럼들을 묶어 그룹화하고 연산하는 함수
-- SUM, AVG, COUNT, MAX, MIN
select
sum(sal) as "월 급여 총액",
to_char(sum(sal), 'L99,999') as "월 급여 총액2",
round(avg(sal)) as "월 급여 평균",
count(*) as "사원 수",
count(comm) as "커미션을 받는 사원수", -- null은 세지 않는다. 0은 셈
max(sal) as "가장 큰 급여"
from emp
;
select
sum(comm),
avg(comm),
count(comm),
max(comm),
min(comm)
from emp
where comm is not null and comm>0
;
-- 전체행을 구한다
select count(*) as from emp; -- 전체 사원의 수
select count(*) as from emp where job='MANAGER'; -- 매니저의 수
-- 매니저의 수, 평균급여, 최고급여
select count(*), avg(sal), max(sal) from emp where job='MANAGER';
-- 직무의 개수
select count(distinct job) -- 중복제거
from emp
;
------------- 특정 컬럼을 기준으로 그룹핑: Group by 컬럼
select deptno
from emp
group by deptno --order by deptno와 다르다.
;
-- 부서별 평균 월급
select deptno, avg(sal)
from emp
group by deptno
;
-- 각 부서별 인원을 부서별 인원이 많은 수대로 정렬
select deptno, count(*)
from emp
group by deptno
order by count(*) desc
;
-- 각 부서별 인원 및 커미션을 받는 사람.
select deptno, count(*)as "부서인원", count(comm) as"커미션받는사람 수"
from emp
-- where comm is not null and comm>0
group by deptno
;
------------------ HAVING : 그룹함수에 조건/ 그룹의 결과를 제한
-- 부서별로 그룹지은 후(GROUP BY), 그룹 지어진 부서별 평균 급여가 2000 이상인(HAVING)
-- 부서번호와 부서별 평균 급여를 출력하는 경우
select deptno, round(avg(sal))
from emp
GROUP by deptno
HAVING avg(sal)>=2000
-- having not avg(sal)>=2000
;
-- 부서별 급여의 최대값과 최소값을 구하되
-- 최대 급여가 2900이상인 부서만 출력합니다.
select deptno, max(sal), min(sal)
from emp
group by deptno
having max(sal)>=2900
order by deptno
;
-- 직무별 지표 : 사원의 수, 급여의 총합, 평균 급여, 최대최소
select job, count(*) || '명' as "사원 수",
to_char(sum(sal)*1100, 'L99,999,999') as "급여 총합",
to_char((avg(sal))*1100, 'L99,999,999') as "급여 평균",
to_char(max(sal)*1100, 'L99,999,999')as "최대 급여",
to_char(min(sal)*1100, 'L99,999,999') as "최소 급여"
from emp
where job != 'PRESIDENT'
GROUP by job
order by job
;
'DB > Oracle SQL' 카테고리의 다른 글
[ORACLE SQL] 서브쿼리 / 부속질의 (0) | 2020.11.11 |
---|---|
[ORACLE SQL] 서브쿼리 (0) | 2020.11.11 |
[ORACLE SQL] 조인 (0) | 2020.11.11 |
[ORACLE SQL] 함수 / DECODE / CASE / TO_CHAR / TO_NUMBER (0) | 2020.11.10 |
[ORACLE SQL] 정렬을 위한 order by (0) | 2020.11.09 |
[ORACLE SQL] where 조건과 비교 연산자 (0) | 2020.11.09 |
[ORACLE SQL] Select 절의 사칙연산 / distinct 중복생략 / as 정의 / null값 치환 nvl (0) | 2020.11.09 |