데이터베이스

데이터베이스_SQL기본(GROUP BY)_예제_ 22.06.23(day04)

양빵빵 2022. 6. 23. 13:35

 

 


-- GROUP BY : 지정된 컬럼으로 소그룹화 한 후 집계함수 적용
-- 부서별로 가장 어린사람의 생년월일, 연장자의 생년월일 부서별 총 사원 수를 조회

SELECT * FROM tb_emp
ORDER BY dept_cd
; -- 그룹 코드별로 묶은 후 아래 내용을 조회 해야지 위에서 원하는 대로 조회 할수 있다.

SELECT
 -- emp_nm -- 사원의 이름은 41개 이므로 14개의 
        --그룹으로 조회된 데이터와 일치하지 않아 조회 불가능
        
  dept_cd 부서코드 -- 그룹 바이에서 지정한 컬럼은 조회 가능      
 ,MAX(birth_de) 최연소자
 ,MIN(birth_de) 최연장자
 ,COUNT(emp_no) 직원수
FROM tb_emp
GROUP BY dept_cd
ORDER BY dept_cd
;

 -- 사원별 누적 급여수령액 조회
SELECT 
  emp_no
  ,SUM(pay_amt) "누적 수령액"

FROM tb_sal_his
GROUP BY emp_no -- group by는 where절 뒤에 order by 전에 위치 해야함.
ORDER BY emp_no
;

-- 사원별로 급여를 제일 많이 받았을 때, 제일 적게 받았을때, 평균적으로 얼마 받았는지 조회
SELECT
  emp_no
  , TO_CHAR(MAX(pay_amt),'L999,999,999') "최고 수령액"
  , TO_CHAR(MIN(pay_amt),'L999,999,999') "최저 수령액"
  , TO_CHAR(ROUND(AVG(pay_amt),2),'L999,999,999.99' )"평균 수령액" 
  -- 통계를 낸 데이터를 단일화 함수로 적용시키는 것은 가능

FROM tb_sal_his
GROUP BY emp_no
ORDER BY emp_no

 

 

====

 

 



-- 2019년에 사원별로 급여를 제일 많이 받았을 때, 제일 적게 받았을때, 평균적으로 얼마 받았는지 조회
 -- 그룹화 하기전에 정보를 제한한후 진행 해야 한다.
 -- WHERE는 그룹화 하기전에 정보를 추출해놓는다.
SELECT
  emp_no
  , TO_CHAR(MAX(pay_amt),'L999,999,999') "최고 수령액"
  , TO_CHAR(MIN(pay_amt),'L999,999,999') "최저 수령액"
  , TO_CHAR(ROUND(AVG(pay_amt),2),'L999,999,999.99' )"평균 수령액" 
  , TO_CHAR(SUM(pay_amt),'L999,999,999') "2019년 연봉"
  -- 통계를 낸 데이터를 단일화 함수로 적용시키는 것은 가능

FROM tb_sal_his
WHERE pay_de BETWEEN '20190101' AND '20191231'
GROUP BY emp_no
ORDER BY emp_no