증감 쿼리 질문입니다 1 1 2,148

by 후인구 [MySQL] [2023.07.16 20:32:45]


SPORTS YEAR 상반기 증감 하반기 증감
MLB 2021 10000 2000 10000 1000
MLB 2022 12000 20% 11000 10%
NBA 2021 14000 1000 15000 2000
NBA 2022 15000 7% 17000 13%
NHL 2021 10000 1000 20000 5000
NHL 2022 11000 10% 25000 25%

TABLE명 : TB_SPORTS

증감쿼리를 위 엑셀처럼 구현해야 되는데 증감은 위 쿼리처럼 구현하고 싶은데요

홀수 ROW :   짝수 ROW -  홀수 ROW   (증감)

ex) NHL기준이면 상반기-증감 11000-10000 = 1000 

                       하반기-증감 25000-20000 = 5000 

짝수 ROW :  (짝수 ROW - 홀수 ROW) / 홀수 ROW * 100  (증감율)

ex) NHL 기준이면 상반기-증감율(11000-10000)/10000*100 = 10 

                        하반기-증감율(25000-20000)/20000*100 = 25

고수님들의 조언 부탁드립니다.

DB는 MARIADB입니다.

 

 

 

by 마농 [2023.07.17 10:23:51]
WITH t AS
(
SELECT 'MLB' sports, '2021' yyyy, 10000 amt1, 10000 amt2
UNION ALL SELECT 'MLB', '2022', 12000, 11000
UNION ALL SELECT 'NBA', '2021', 14000, 15000
UNION ALL SELECT 'NBA', '2022', 15000, 17000
UNION ALL SELECT 'NHL', '2021', 10000, 20000
UNION ALL SELECT 'NHL', '2022', 11000, 25000
)
SELECT sports
     , yyyy
     , amt1
     , CASE yyyy WHEN '2022' THEN CONCAT(ROUND((amt1_2 - amt1_1) / amt1_1 * 100), '%') ELSE amt1_2 - amt1_1 END var1
     , amt2
     , CASE yyyy WHEN '2022' THEN CONCAT(ROUND((amt2_2 - amt2_1) / amt2_1 * 100), '%') ELSE amt2_2 - amt2_1 END var2
  FROM (SELECT sports
             , yyyy
             , amt1
             , SUM(CASE yyyy WHEN '2021' THEN amt1 END) OVER(PARTITION BY sports) amt1_1
             , SUM(CASE yyyy WHEN '2022' THEN amt1 END) OVER(PARTITION BY sports) amt1_2
             , amt2
             , SUM(CASE yyyy WHEN '2021' THEN amt2 END) OVER(PARTITION BY sports) amt2_1
             , SUM(CASE yyyy WHEN '2022' THEN amt2 END) OVER(PARTITION BY sports) amt2_2
          FROM t
        ) a
 ORDER BY sports, yyyy
;

 

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