[sql] JOIN 결과에 테이블 피벗하기

먼저, PIVOT 함수를 사용하여 특정 열을 열로 변환하는 방법을 살펴보겠습니다.

SELECT *
FROM (
    SELECT department, salary
    FROM employees
) src
PIVOT (
    AVG(salary)
    FOR department IN ('HR' AS hr, 'IT' AS it, 'Finance' AS finance)
) pivoted;

위 예제에서는 사원 테이블에서 각 부서별 평균 급여를 피벗하고 있습니다. PIVOT 키워드 다음에는 평균 급여를 계산할 열을 지정하고, FOR 절에는 피벗할 기준이 될 열을 지정합니다. 이어서 각 부서를 표시할 수 있는 AS 절을 사용하여 실제 열 이름을 정의합니다.

그러나 PIVOT 함수는 모든 데이터베이스에서 사용 가능하지 않을 수 있습니다. 이 경우 CASE 문을 사용하여 피벗할 수 있습니다.

SELECT employee_id,
    MAX(CASE WHEN department = 'HR' THEN salary END) AS hr_salary,
    MAX(CASE WHEN department = 'IT' THEN salary END) AS it_salary,
    MAX(CASE WHEN department = 'Finance' THEN salary END) AS finance_salary
FROM employees
GROUP BY employee_id;

위의 예제에서는 CASE 문을 사용하여 각 부서에 따라 급여를 표시하는 쿼리를 보여줍니다. 각 부서의 급여를 표시할 열을 작성하고, MAX 함수를 사용하여 해당하는 급여를 가져옵니다.그리고 GROUP BY를 사용하여 각 사원에 대한 결과를 그룹화합니다.

피벗은 데이터를 쉽게 비교하고 분석할 수 있도록 도와줍니다. 특히 보고서를 작성하거나 시각화하는 경우에 매우 유용합니다.