피벗테이블 질문드립니다! 0 3 1,339

by Atreyu [2018.07.11 17:56:44]


S_MIN R_MIN P_PER
0 0 0
0 0 0
0 0 0
73672 234576 31
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0

 위와 같은 테이블 데이터를 피벗테이블로 만들고 싶습니다.

9개의 행이 열로 변해서 1 2 3 4 5 6 7 8 9 가 되고

S_MIN, R_MIN, P_PER 의 3개의 열을 행으로 만들려고합니다.

ROW 데이터에 키처럼 쓸 수 있는게 있다면 좋은데 이건 어떻게 해야 할지 감이 아예 안잡히네요..

어떤식으로 구성해서 할까요?

MYSQL 입니다 ㅠ

by 마농 [2018.07.11 18:12:39]

mySQL 8.0 부터 분석함수 가능한데요? 버전이 어찌 되나요?


by 마농 [2018.07.11 18:41:56]
SELECT lv
     , CASE lv WHEN 1 THEN 's_min'
               WHEN 2 THEN 'r_min'
               WHEN 3 THEN 'p_per'
        END gb
     , MIN(CASE rn WHEN 1 THEN v END) v1
     , MIN(CASE rn WHEN 2 THEN v END) v2
     , MIN(CASE rn WHEN 3 THEN v END) v3
     , MIN(CASE rn WHEN 4 THEN v END) v4
     , MIN(CASE rn WHEN 5 THEN v END) v5
     , MIN(CASE rn WHEN 6 THEN v END) v6
     , MIN(CASE rn WHEN 7 THEN v END) v7
     , MIN(CASE rn WHEN 8 THEN v END) v8
     , MIN(CASE rn WHEN 9 THEN v END) v9
  FROM (SELECT rn
             , lv
             , CASE lv WHEN 1 THEN s_min
                       WHEN 2 THEN r_min
                       WHEN 3 THEN p_per
                END  v
          FROM (SELECT @rn := @rn + 1 rn
                     , s_min, r_min, p_per
                  FROM (SELECT 0 s_min, 0 r_min, 0 p_per
                        UNION ALL SELECT     0,      0,  0
                        UNION ALL SELECT     0,      0,  0
                        UNION ALL SELECT 73672, 234576, 31
                        UNION ALL SELECT     0,      0,  0
                        UNION ALL SELECT     0,      0,  0
                        UNION ALL SELECT     0,      0,  0
                        UNION ALL SELECT     0,      0,  0
                        UNION ALL SELECT     0,      0,  0
                        ) a
                     , (SELECT @rn := 0) b
                ) c
             , (SELECT 1 lv
                UNION ALL SELECT 2
                UNION ALL SELECT 3
                ) d
        ) e
 GROUP BY lv
 ORDER BY lv
;

 


by Atreyu [2018.07.12 14:20:50]

감사합니다. 이제야 확인을 했네요. 저 데이터들을 CASE문으로 하나씩 다 빼서 열로 만들었습니다.

그리고 열 3개를 UNION ALL 해서 주신것과 같은 결과를 만들었긴 했는데 확실히 속도가 많이 느려지더군요..

주신 방법 한번 분석해서 이걸로 변경 해봐야겠습니다! 감사합니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입