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입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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 ; |