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입니다.
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 ;