inblog logo
|
harimmon
    데이터베이스

    [Database] 20. PIVOT

    백하림's avatar
    백하림
    Feb 28, 2025
    [Database] 20. PIVOT
    💡

    피벗 정리 포인트

    • 피벗이란? → 세로(행) 데이터를 가로(열) 데이터로 변환하는 것
    • 왜 필요할까? → 데이터를 보기 쉽게 정리하고, 분석을 쉽게 하기 위해
    • SQL에서 피벗 방법
        1. CASE WHEN을 이용한 정적 피벗
        1. GROUP_CONCAT()을 이용한 동적 피벗 (MySQL 전용)

    1. 달력을 출력해보자

    select * from cal;
    notion image

    2. 샘플링 코드 1 (1주만 출력)

    select sum(if(day = '일', num_day, 0))'일', sum(if(day = '월', num_day, 0))'월', sum(if(day = '화', num_day, 0))'화', sum(if(day = '수', num_day, 0))'수', sum(if(day = '목', num_day, 0))'목', sum(if(day = '금', num_day, 0))'금', sum(if(day = '토', num_day, 0))'토' from cal where week = 1;
    notion image

    3. 샘플링 코드2 (2주 출력)

    select sum(if(day = '일', num_day, 0))'일', sum(if(day = '월', num_day, 0))'월', sum(if(day = '화', num_day, 0))'화', sum(if(day = '수', num_day, 0))'수', sum(if(day = '목', num_day, 0))'목', sum(if(day = '금', num_day, 0))'금', sum(if(day = '토', num_day, 0))'토' from cal where week = 1 union all select sum(if(day = '일', num_day, 0))'일', sum(if(day = '월', num_day, 0))'월', sum(if(day = '화', num_day, 0))'화', sum(if(day = '수', num_day, 0))'수', sum(if(day = '목', num_day, 0))'목', sum(if(day = '금', num_day, 0))'금', sum(if(day = '토', num_day, 0))'토' from cal where week = 2;

    4. 샘플링 코드를 참고해서, GROUP BY로 묶어준다.

    select week, sum(if(day = '일', num_day, 0))'일', sum(if(day = '월', num_day, 0))'월', sum(if(day = '화', num_day, 0))'화', sum(if(day = '수', num_day, 0))'수', sum(if(day = '목', num_day, 0))'목', sum(if(day = '금', num_day, 0))'금', sum(if(day = '토', num_day, 0))'토' from cal group by week;
    notion image

    5. 결과를 가지고 실제 테이블로 만들기

    💡
    CREATE TABLE 테이블명 AS
    create table cal2 as select day, num_day from cal; select * from cal2;
    notion image

    6. cal2를 가지고 주 열을 만들어라. (case when then 사용)

    select day,num_day, case when num_day <= 7 then "1" when num_day <= 14 then "2" when num_day <= 21 then "3" when num_day <= 28 then "4" else '5' end '주' from cal2;
    notion image

    7. cal2를 가지고 주 열을 만들어라. (CEIL함수 사용)

    SELECT day, num_day, CEIL(num_day / 7) AS '주' FROM cal2;
    notion image
    Share article

    harimmon

    RSS·Powered by Inblog