| 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
;