일자별로 누계를 구하는 쿼리 문의 0 6 1,487

by 정수리형 [SQL Query] [2023.05.11 11:20:18]


유지보수 중인 사이트에서 속도가 너무 안나와서 

 

쿼리를 수정 중에 있습니다.

 

Select SUM(a)-(sum(b)+sum(c)) as T From TABLE A Where A.FYEAR = '2020' and A.YMD <= '2020129';

20년 1월29일까지의 누계를 구하는 쿼리 입니다.

문제는 조회 기간을 1월1일 ~ 1월~29일까지  조회를 하게 되면

Select SUM(a)-(sum(b)+sum(c)) as T From TABLE  A Where A.FYEAR = '2020' and A.YMD <= '2020101';

~

Select SUM(a)-(sum(b)+sum(c)) as T From TABLE A Where A.FYEAR = '2020' and A.YMD <= '2020129';

조회 기간동안 반복을 통해서 수십번의 쿼리가 돌아 갑니다

 

그렇다보니 속도가 많이 느려지더라구요

이걸 개선하려고 하는데 

group을 통해 일자별로 하려고 출력해보려하니

누계 합산이 제대로 안되더라구요..

기간 조회시 반복문으로 여러번의 쿼리를 돌리지 않고 한번으로 돌리려고 하는데

선배님들의 조언을 들을수 있을까요?

 

by 우리집아찌 [2023.05.11 13:44:18]

원본 데이터 샘플과 원하시는 데이터 샘플을 올려주세요.


by 정수리형 [2023.05.11 14:52:21]

답변감사합니다.

다행히 구글링을 통해 해결하였습니다

구글링을 통해 쿼리 힌트를 얻기하였는데 궁금점이 있어 다른 질문을 해도 괜찮을지 

join에 대해 보통 찾아보면 

on ymd = ymd로 나와있던데 

join에서 on ymd <= ymd 는 무슨 의미일까요??


by 마농 [2023.05.11 14:59:33]
SELECT year
     , ymd
     , SUM(a)-SUM(b)-SUM(c) t
     , SUM(SUM(a)-SUM(b)-SUM(c)) OVER(ORDER BY ymd) tt
  FROM table a
 WHERE year = '2020'
 GROUP BY year, ymd
;

 


by 정수리형 [2023.05.11 15:14:40]

답변감사합니다 마농님

처음에 가입하고 첫 글올렸주셨을때도 마농님이였는데

아직도 활발히 활동 중이시네요

다행히 구글링을 통해 참조하여 해결하였구요

over 함수를 사용하려고 하였지만 db에 5점대 버전이라 over함수가 사용이 안되어

다른 방법으로 해결하였습니다^^


by 우리집아찌 [2023.05.11 15:25:29]

sumsum -> sum(sum ..


by 마농 [2023.05.12 08:37:22]

해결 방법을 공유해 주시면 좋을 듯 하네요.

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