hyeonga_code
Database_69_그룹 함수_LISTAGG 함수, PIVOT 함수 본문
-- 그룹 함수
-- LISTAGG 함수
-- 데이터를 그룹화 한 상태에서 각 그룹 안에 특정 필드 값을 한 행으로 출력합니다.
-- 여러 행의 열 값을 한 행의 값으로 가져와야 할 때 사용하는 그룹 함수입니다.
-- 그룹화된 개별 데이터를 하나의 열에 가로로 출력합니다.
/*
SELECT LISTAGG( column1, '구분자') WITHIN GROUP ( ORDER BY column2 )
FROM table
GROUP BY column_name;
-- column1 : 가로로 출력될 열의 이름입니다.
-- ORDER BY column2 : 결과를 가로로 출력되는 데이터로 정렬합니다.
*/
-- 부서를 확인합니다.
SELECT department_id, last_name
FROM employees
ORDER BY 1,2;
-- 같은 부서의 사람들의 수와, 이름을 가로로 나열합니다.
SELECT department_id, COUNT(*), LISTAGG(last_name, ',') WITHIN GROUP (ORDER BY salary DESC) AS ename
FROM employees
GROUP BY department_id;
-- PIVOT 함수
-- 통계에서 많이 사용합니다.
-- 행을 열로 변환해주는 함수입니다.
/*
SELECT column1
FROM [table | Subquery]
PIVOT ( group_function FOR column2 IN (value,…) )
[ORDER BY…];
-- 그룹 함수를 PIVOT 함수 안에 작성합니다.
-- 그룹 함수를 사용하여 그루핑 대상을 정의합니다.
-- column1 : PIVOT 대상 테이블 또는 서브쿼리를 의미합니다.
-- column2 : 가로로 출력할 PIVOT의 기준 열이 됩니다.
*/
-- 직책별 최고 급여를 조회합니다.
SELECT *
FROM ( SELECT department_id, job_id, salary FROM employees
WHERE department_id IN (50, 60, 80) )
PIVOT ( MAX(salary) FOR department_id IN (50, 60, 80) );
-- 부서별 최고 급여를 조회합니다.
SELECT *
FROM (SELECT job_id, department_id, salary FROM employees
WHERE department_id IN (50,60, 80) )
PIVOT ( MAX(salary) FOR job_id IN ('IT_PROG','SA_MAN','SA_REP', 'ST_CLERK', 'ST_MAN') )
ORDER BY department_id;
-- PIVOT 함수를 사용하여 부서별 입사 월을 분류합니다.
SELECT *
FROM ( SELECT job_id ,
TO_CHAR(hire_date, 'fmMM') || '월' AS hire_month
FROM employees )
PIVOT ( COUNT(*)
FOR hire_month IN ( '1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월' ) );
-- DECODE/GROUP 함수를 사용하여 같은 결과를 출력합니다.
SELECT job_id
, SUM(DECODE(TO_CHAR(hire_date, 'fmMM'), '1', 1, 0)) "1월"
, SUM(DECODE(TO_CHAR(hire_date, 'fmMM'), '2', 1, 0)) "2월"
, SUM(DECODE(TO_CHAR(hire_date, 'fmMM'), '3', 1, 0)) "3월"
, SUM(DECODE(TO_CHAR(hire_date, 'fmMM'), '4', 1, 0)) "4월"
, SUM(DECODE(TO_CHAR(hire_date, 'fmMM'), '5', 1, 0)) "5월"
, SUM(DECODE(TO_CHAR(hire_date, 'fmMM'), '6', 1, 0)) "6월"
, SUM(DECODE(TO_CHAR(hire_date, 'fmMM'), '7', 1, 0)) "7월"
, SUM(DECODE(TO_CHAR(hire_date, 'fmMM'), '8', 1, 0)) "8월"
, SUM(DECODE(TO_CHAR(hire_date, 'fmMM'), '9', 1, 0)) "9월"
, SUM(DECODE(TO_CHAR(hire_date, 'fmMM'), '10', 1, 0)) "10월"
, SUM(DECODE(TO_CHAR(hire_date, 'fmMM'), '11', 1, 0)) "11월"
, SUM(DECODE(TO_CHAR(hire_date, 'fmMM'), '12', 1, 0)) "12월"
FROM employees
GROUP BY job_id;