--통계함수 / 그룹함수

count(필드) <= null 포함시키지 않는다

count(*)    <= 전체계산 


sum(필드) : 합

avg(필드) : 평균

min(필드) : 최소값

max(필드) : 최대값


--그룹통계

select 그룹을 짓을 필드,통계함수 from 테이블

group by 그룹을 짓을 필드

having   조건(그룹합수에 대한 결과) 



--산술처리 함수

ceil(실수)   :  10.5 =>

floor(실수)  :

round(값,소숫점자릿수) : 


select ceil(10.5),floor(10.5),  

       10/6,round(10/6,1) 반올림, trunc(10/6,1) 잘라낸다 

from dual;



select * from sawon

--사원테이블에서 전체사원수 구하기

select count(*) 사원수,count(sabun) 갯수, count(samgr) 관리자 from sawon;


--전체직원의 급여합계

select sum(sapay) 급여합계, avg(sapay) 급여평균 from sawon;

select sum(sapay) / count(*)  급여평균 from sawon;


--10,20,30,40번부서의 급여합계

select sum(sapay) 급여합계, count(*) 인원수 from sawon where deptno=10;

select sum(sapay) 급여합계, count(*) 인원수 from sawon where deptno=20;

select sum(sapay) 급여합계, count(*) 인원수 from sawon where deptno=30;

select sum(sapay) 급여합계, count(*) 인원수 from sawon where deptno=40;


--각부서별 급여합계 및 인원수 구해라..

--select * from sawon order by deptno

select deptno,count(*) 인원수,sum(sapay) 급여합계 

from sawon

group by deptno  -- 부서별로 그룹화

order by deptno ;


--성별 인원수

--select * from sawon order by sasex;

select sasex, count(*) from sawon

group by sasex


--부서별 성별 인원수

-- select * from sawon order by deptno,sasex; --1차,2차정렬


select deptno,sasex, count(*) from sawon

group by deptno,sasex

order by deptno,sasex ;



-- 직급별 인원수=> 그룹통계에 대한 조건절 having절

select sajob ,count(*) from sawon

group by sajob

having count(*)>=5 ;


--그룹통계는 연산필드에서도 적용

select * from gogek;


select substr(gojumin,8,1),count(*) from gogek

group by substr(gojumin,8,1)


--연산자 : case ~ when ~then ~end

select 

       case

         when substr(gojumin,8,1) in('1','3') then '남자'

         else '여자'

       end

from gogek;


select 

       case substr(gojumin,8,1)

         when  '1' then '남자'

         when  '3' then '남자'

         when  '2' then '여자'

         when  '4' then '여자'

       end as 성별

from gogek;




select 

       case

         when substr(gojumin,8,1) in('1','3') then '남자'

         else '여자'

       end as 성별,

       count(*) 인원수 from gogek

group by case

         when substr(gojumin,8,1) in('1','3') then '남자'

         else '여자'

       end


--고객테이블에서 고객의 출생월별 인원수

select substr(gojumin,3,2) 월 from gogek;

select  substr(gojumin,3,2) 월,count(*) from gogek

group by substr(gojumin,3,2);



--고객테이블에서 고객의 출생계절별 인원수

select substr(gojumin,3,2) 월,

       case

          when substr(gojumin,3,2) in('03','04','05')  then '봄'

          when substr(gojumin,3,2) in('06','07','08')  then '여름'

          when substr(gojumin,3,2) in('09','10','11')  then '가을'

          else '겨울'

       end as 계절

from gogek;


select case

          when substr(gojumin,3,2) in('03','04','05')  then '봄'

          when substr(gojumin,3,2) in('06','07','08')  then '여름'

          when substr(gojumin,3,2) in('09','10','11')  then '가을'

          else '겨울'

       end as 계절,

       count(*) 인원수

from gogek

group by

       case

          when substr(gojumin,3,2) in('03','04','05')  then '봄'

          when substr(gojumin,3,2) in('06','07','08')  then '여름'

          when substr(gojumin,3,2) in('09','10','11')  then '가을'

          else '겨울'

       end



+ Recent posts