mysql 해당 년도 그룹별로 데이터를 보여주게하고싶습니다. 0 2 1,286

by 겸둥이k [SQL Query] mysql [2022.05.06 16:09:24]


안녕하세요 현재 통계치를 짜고있는데 어려움이있어 질문드립니다. ㅠ

	SELECT 
	  		DATE_FORMAT(DCB_YMD, '%Y') DCB_YMD
	  		,'' AS STATE_DT2
	  		,COUNT(CASE WHEN DTL_STATE_GBN = '02'  THEN  DTL_STATE_NM END) AS STATE_SUM_DT2	
	  		FROM  TB_BUSINESS_STATUS_TEMP
	  		WHERE  DATE_FORMAT(DCB_YMD, '%Y')  <= DATE_FORMAT(NOW(), '%Y')-1
	  	GROUP BY DATE_FORMAT(DCB_YMD, '%Y')

조회시 

DCB_YMD  STATE_DT2 , STATE_SUM_DT2

1974                           1
1976                           1
1977                           1
1981                           3
1982                           9
1983                           19
1984                           16
1985                           49
1986                           93
1987                           111
1988                           381
1989                           944
1990                           1452
1991                           3937
1992                           3274
1993                           6255
1994                           10602
1995                           11355
1996                           12984
1997                           18073
1998                           20711
1999                           28603
2000                           33367
2001                           36759
2002                           54209
2003                           52893
2004                           58340
2005                           65460
2006                           58457
2007                           52107
2008                           49542
2009                           47353
2010                           46580
2011                           47878
2012                           43862
2013                           46827
2014                           43375
2015                           47443
2016                           48806
2017                           53755
2018                           56957
2019                           55550
2020                           51503
2021                           53239

위의 보여주고있는데 이데이터를 4년치 데이터의 총합계를 보여주고싶습니다.  

1974~2019 총합 

1974~2020 총합

1974~2021 총합

 

--------------------------------

2018  1062844

2019 1118394

2020 1169897

2021 1223136

이데이터를 뽑아내고싶습니다.

 

답변부탁드립니다. 감사합니다.

by pajama [2022.05.07 00:12:30]

두가지로 해보았습니다.

with t (dcb_ymd, state_sum_dt2) as (
select '1974',1 union all
...
select '2020',51503 union all
select '2021',53239
)
select * from(
select dcb_ymd, sum(state_sum_dt2) over(order by dcb_ymd)
from t
) tmp
where dcb_ymd >= 2018

 

select * from(
select t1.dcb_ymd, sum(t2.state_sum_dt2)
from t t1, t t2
where t2.dcb_ymd <= t1.dcb_ymd
group by t1.dcb_ymd
) tmp
where dcb_ymd >= 2018

 


by 마농 [2022.05.09 10:59:13]

1. 컬럼 가공 조건 개선
- 변경전 : 컬럼을 가공하여 조건 비교
- 변경후 : 컬럼은 그대로 두고 조건을 가공하여 비교
2. 불필요 case 제거
- case 조건을 Where 절로 내림
3. 누적합
- 분석함수 over 이용
 

SELECT *
  FROM (SELECT DATE_FORMAT(dcb_ymd, '%Y') dcb_ymd
             , SUM(COUNT(*)) OVER(ORDER BY DATE_FORMAT(dcb_ymd, '%Y')) state_sum_dt2
          FROM tb_business_status_temp
         WHERE dcb_ymd < CONCAT(DATE_FORMAT(NOW(), '%Y'), '-01-01')
           AND dtl_state_gbn = '02'
         GROUP BY DATE_FORMAT(dcb_ymd, '%Y')
        ) a
 WHERE dcb_ymd >= DATE_FORMAT(NOW(), '%Y') - 4
;

 

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