데이터들에 평균 구하는 방법은 어떻게 해야?? 0 9 2,964

by 허브 [2008.10.20 12:15:13]


제목 없음.bmp (504,630Bytes)

게시판에 2011번에 글쓴 사람인데요

20070521,20070514,20070507에 데이터를 불러와서

각 필드에 데이터마다 일정한 계수를 곱해서 다른 테이블에 적재를 시켜놨습니다..

이렇게 적재된 데이터들에 평균을 구해서 보여주려고하는데

select sum(TD_OA) as SUM_OA, sum(TD_OB) as SUM_OB, sum(TD_OC) as SUM_OC, sum(TD_OD) as SUM_OD, sum(TD_OE) as SUM_OE, sum(TD_OF) as SUM_OF,sum(TD_OG) as SUM_OG, sum(TD_OH) as SUM_OH, sum(TD_OI) as SUM_OI,sum(TD_AO) as SUM_AO, sum(TD_AA) as SUM_AA, sum(TD_AB) as SUM_AB,sum(TD_AC) as SUM_AC, sum(TD_AD) as SUM_AD, sum(TD_AE) as SUM_AE,sum(TD_AF) as SUM_AF, sum(TD_AG) as SUM_AG, sum(TD_AH) as SUM_AH,sum(TD_AI) as SUM_AI, sum(TD_BO) as SUM_BO, sum(TD_BA) as SUM_BA,sum(TD_BB) as SUM_BB, sum(TD_BC) as SUM_BC, sum(TD_BD) as SUM_BD from system.ACCTEST_DS where yyyymmdt in to_char(to_date(’" + Date1 + "’,’yyyymmdd’)-(7*1), ’yyyymmdd’) or yyyymmdt in to_char(to_date(’" + Date1 + "’,’yyyymmdd’)-(7*2), ’yyyymmdd’) or yyyymmdt in to_char(to_date(’" + Date1 + "’,’yyyymmdd’)-(7*3), ’yyyymmdd’);

이렇게하면 더한 값들만이 되는데

저기서 sum을 avg로 바꾸니까 평균이 구해지긴하는데

데이터가 2테이블에서 불러와서 한테블에 적재시키는 거라서..

20070422을 입력하면 20070415 2개, 20070408 2개, 20070401 2개 총 6로우에 데이터가 적재되는데요

불러와질때 각 필드에 일정한 값을 곱해서 적재시키는 바람에 총 6행이 한번에 불어와집니다.

그런데 구하고자하는 평균은 3주라 6을 나눈 평균이 아닌 3을 나눈 평균을 구해야 하는데

3으로 나눌수 있는 평균은 어떻게하면 될지.. 여기까지 오는데 3주가 걸리네요 ㅠㅠ

 

by 유찬호 [2008.10.20 13:06:21]
이건 어떤지 ..?

with tab_dt as (SELECT to_char(to_date('20070421','yyyymmdd') + level, 'yyyymmdd') dt
FROM dual
CONNECT BY LEVEL < 110 )
select dt -- to_char(add_months(to_date('20070422','yyyymmdd')-21,0), 'yyyymmdd')
from tab_dt
where dt
-- ++++++++++++++++++++++++++++++++++++++++++++++++ --
in ( SELECT to_date('20070422','yyyymmdd') + (7 * (level -1) )
FROM dual
CONNECT BY LEVEL <= 3 )
-- ++++++++++++++++++++++++++++++++++++++++++++++++ --
;

by 호야 [2008.10.20 13:33:13]
말로만 너무 설명 해 놓으셔서.. 대충 감은 잡히지만

그냥 테이터를 적재 시켜서 나온 6개의 간단한 값과
그 값이 나오게 될 결과 값을 수정해서 보여 주세요

by 허브 [2008.10.20 13:37:02]
찬호님 감사합니다.. 근데 이해가 아직 ;;
레벨값을 줘서 레벨갯수로 나눠서 평균값을 구하는거같기도하고
아직 초짜라 좀더 자세히 알려주셨으면 ^^;;

by 허브 [2008.10.20 13:44:25]
호야님 글올려주셔서 고맙구요..
불러온 6개에 데이터를 drid된 부분 캡쳐해서 올렸습니다..
6개의 로우를 3으로 나누는 평균을 구하려고하는데요 결과값을 수정해서
보여주는건 어떤건지...??

by 도가니 [2008.10.20 13:53:47]
2개의 테이블에 해당날짜의 row를 가져온다는 말씀인가요? 그렇다면 두 테이블을 먼저 JOIN후 나온 데이터의 평균을 구하시면 될듯 한데,,,
아니면 한 테이블에 해달날짜의 row가 2개 이상이 있다는 말씀인가요? 그렇다면 해당날짜로 group by 후 각 날짜의 평균을 구해서 다시 전체 평균을 구하시면 될듯,,

아무래도 전자쪽 질문이신거 같은데,,

by 호야 [2008.10.20 13:54:17]
결과값의 수정이란 것은..
저 6개의 로우를 가지고.. 결과 값이 어떻게 나와야 되는지를 말하는 겁니다^^
YYYYMMDT TD_OA를 예로 들때
20070715 15320
20070715 22288
20070708 26810
20070708 11401.2
20070701 33030
20070701 3726.2
-----------------------------------
이 값이 원값인데... 결과 값이 어떻게 나와야 되나요?

by 호야 [2008.10.20 14:09:48]
먼지 감은 잡혔는데요.. 이 데이터가 썩이게 될 경우...
2개의 테이블에서 자료를 가지고 오기 때문에..
테이블을 적재 시킬때 어느 테이블에서 왔는지에 대한 구분적은 킬럼이 있어야
합니다.. 무작정 3으로 나누면.. 데이터가 썩이게 되고 자료는 맞지 않게되는
겁니다.. 그러니 저 상황에서 구분자가 있다면 GROUP BY 를 이용하여 AVG를
하시면 되겠지만 구분자가 없다면 적재 시키기 전에 구분자와 함께 적재를
시켜 주시면.. 쉽게 결과를 낼수 있으십니다.

by 호야 [2008.10.20 14:40:58]
WHERE DT IN (TO_CHAR(TO_DATE('" + Date1 + "','yyyymmdd')-7,'YYYYMMDD'),TO_CHAR(TO_DATE('" + Date1 + "','yyyymmdd')-14,'YYYYMMDD'),TO_CHAR(TO_DATE('" + Date1 + "','yyyymmdd')-21,'YYYYMMDD'))

WHERE 절은 이렇게 사용하시구요...
구분자가 필요 할 듯싶네요.
구분자라는 것은 위에 있는 TD_OA 6개 자료를
나누는 구역을 말하는 것이구요.. 아래 예시
YYYYMMDT TD_OA를 예로 들때
===================================
20070715 15320 <= 1번 테이블
20070715 22288 <= 2번 테이블
20070708 26810 <= 1번 테이블
20070708 11401.2 <= 2번 테이블
20070701 33030 <=1번 테이블
20070701 3726.2 <=2번 테이블

===================================

결과는
====================================
평균출처 평균
1번테이블 25053.3
2번테이블 12471.8



날짜별로 더하기해서 3으로 나눈 값이
나와야 되나요?

평균
---------------------------------------
37525.1

by 허브 [2008.10.20 15:03:20]
호야님 이렇게 까지 해주시니 너무 감사합니다.
설명이 미흡한데도 감을 잡으시니 굉장하시네요^^;

네 평균은 테이블별로 평균이 나와서 합한값이 맞아요
불러온데이터들을 3으로 나뉜값하고 동일하네요^^;

where절은 알겠는데요 아까 말씀해주신 group by(?) 구분자를
언제 써줘야하죠? 1번테이블과 2번 테이블에서 평균을
구하려는 테이블로 insert해줄때 해주는건지요? 어떻게 써주는건가요?
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입