항상 난해 한 질문만 하는데요 ..
현제 원하는대로 쿼리를 짜서 원하는 내용이 출력되는데요.
현제 조인으로 7개의 테이블에서 데이터를 가져오고 있습니다.
그 중 한 테이블에 1 ~ 10 까지의 컬럼이 있다고 가정 할때
동일 "년 / 월 / 일 "은 하나로 통합 시키면서 통합시킨 단가의 합을 통합 갯수로 나누어 평균값으로 나오게 출력 하려면 어떻게 해야될까요?
다시 예를 들면 8번 컬럼이 년/월/일 이고 9번 컬럼이 금액 일때
8번에 동일 열이 3개 일때
8번 열을 하나로 만들면서 9번의 금액 각각 10 씩 이라면 30 /3 = 10 계산되게 해서 출력 되게 하고 싶은데요.
어찌 해야 될까요?
현제 쿼리는 조인 쿼리로 되어 있어서 조건식에 넣어야 될것 같은데요 ...
난감합니다.
도와주세요.
Comment 8
-
건우아빠
2014.01.15 09:52
-
ssunsori
2014.01.15 17:11
아무래두 그렇죠 ...
죄송합니다.
18시 이후에 실 데이터 올리겠습니다.
거듭 죄송합니다.
-
ssunsori
2014.01.15 17:40
set statistics profile on
set statistics io on
set statistics time onselect top 5
-- 개별지
pm.YEAR_NAME , pm.AS1 ,pm .ADDR_NAME ,pm. BUNJI, pm . AREA ,pm. pnu,
pm.GIMOK_NAME ,pm . GIYUK_NAME ,pm .GIYUK2_NAME, pm. FASC_NAME , pm. FASCY,pm .GITA_NAME , pm .YOUNGDO_NAME ,
pm.GOJEU_NAME ,pm . HUNG_NAME ,pm .BAN_NAME, pm. Y1AREA , pm. Y2AREA,pm .GAKUKC, pm. GAKUKJ , pm. GAKUKD,
pm.GUBUN_NAME ,pm . LIMYA_NAME ,pm .TRA_NAME, pm. HASU_NAME,
hm .HPRICE,
--실거래
rm. ALL_AREA , rm. TOT_AREA,
rd.DEALER_TYPE_NM ,rd . DEALER_GBN_NM , rd. RATIO ,
rc.SUM_AMT ,rc . DEAL_YMD ,
rs.OBJ_FIN_GBN_NM ,
-- 건축물
bl.addr ,bl .main_purps ,bl . BLD_NM , bl .MGM_BLDRGST_PK,
BI.useapr_day , BI.hhld_cnt , BI.fmly_cnt , BI. main_bld_cnt , BI.grnd_flr_cnt ,
BI.ETC_JIBUN ,BI .STRCT_NM , BI.ROOF_NM , BI.MGM_BLDRGST_PK ,
HO.flr_no , ho . priv_area, ho. comm_area, ho. sum_area , ho .park_area , ho . ho_nm,
KM.NAEM1 , KM . ACCOUNT , KM .JUNDATE ,km. outdate, km.gamga , KM.GNAME , -- KM.GNAME,
tm.GIKOO --,tm . NAT_LAW_GIYUK , tm.GIYUKfrom
TB_PUBLIC_LAND_MASTER as pm left join
TB_PUBLIC_HOUSE_MASTER as hm on (pm.PNU = hm.pnu )
left join TB_REAL_MASTER as rm on (rm.pnu = pm.PNU )
left join TB_REAL_DEALER as rd on (rd. ACC_YEAR + rd. SGG_CD + rd.JOB_GBN = rm.ACC_YEAR + rm.SREG + rm.JOB_GBN )
left join TB_REAL_MASTER_COMM as rc on ( rc.pnu = pm.PNU )
left join TB_REAL_SUBOBJECT rs on (rs. pnu = pm. PNU )
left join TB_BUILD_INFO as BI on (bi. BJD_NAME + bi. JIBUN = pm.ADDR_NAME + pm.BUNJI )
left join TB_BUILD_LIST as bL on (bl. MGM_BLDRGST_PK = BI.MGM_BLDRGST_PK )
left join TB_BUILD_HO as ho on ( ho. MGM_UPPER_BLDRGST_PK = BI. MGM_BLDRGST_PK)
left join TB_KAPA_MASTER as km on (km. REG + km. EUB + km. BUN1 + BUN2 = pm.SREG + pm.SEUB + pm.SBUN1 + pm.SBUN2 )
left join TB_TOJI_MASTER as tm on ( tm .PNU = pm.PNU )
where pm .ADDR like '둔촌동%'
and pm .BUNJI like '135%'위가 쿼리 입니다. 그리고 결과 값은 간략하게
ㅇ여기에서 jundate 가 년/월/일 이고 gamga 가 금액인데요 .
같은 년/월/일 이 있을경우 하나로 표시 하고 같은 금액은 전부 더하기 하구요
그리고 년/월/일 갯수 나누기 금액 값이 출력 되야 합니다.
현제 실행 하면 각각의 년/월/일 과 각각의 금액이 나오는데요 .
하나로 통합 하면서 합계의 평균치가 나오게 하고 싶은데 .. 어찌 해야 될까요?
제가 해본 방식은 우선 합산 부터 해볼 요량으로
select 컬럼 등등등등 sum(km.jundate) 컬럼 등등등
위에 보이는 조건 주고 나서
group by km.gamga
했는데요.. 오류만 .. 나오네요;;
후 ~
-
건우아빠
2014.01.16 13:08
jundate 가 같을때는 집계로 보여저야 하다는 말씀 이신데
위의 결과 그림을 보면 jundate 2003-12-26일 건이 2개가 있는데 이게 하나로 해서 보여져야 하는데 문제는
jundate 값은 같지만 name1 , outdate의 값이 다릅니다. 이걸 어떻게 보여 줄지가 .. 하나만 최근걸 보여주는냐 안보여주느냐 ,
문자열은 sum이 안되기 때문에 이걸 어떻게 보여줄지가 결정이 되어야 쿼리가 정해집니다. 단순히 max 로 처리하시거나 안보여주면 쉽지만 그렇지 않는 경우는 달라집니다...
-
ssunsori
2014.01.16 13:37
순간 이해가 됬습니다.
3개의 열을 뿌리면 않되겠네요.
오직 jundate / gamga 만 뿌려야 겠군요
그럼 order by 와 sum(km.gamga) 하고나서 평균치를 하려면 avg 에서 손이 멈춥니다.;;
jundate 가 3개가 될지 10개가 될지 모르거든요 ...
그리고 한가지 더요 .
위의 쿼리를 실행 했을때 ~
어쩔때는 10초 안짝으로 결과물이 나올때도 있고 , 어쩔때는 1분 이상 또는 10분 이상 나올때가 있습니다.
왜 그럴까요 ~
실행 계획 보면 30초 미만 뿌려줄때는 루프 라든지 i/o / cpu 값이 낮지만 .. 오래 걸릴때는
루프만 60번 ..
그리고 그런일 발생 했을때 보면 특정 3개 테이블에서만 주로 루프가 발생 되더군요 ..
쿼리를 다르게 다시 재 구성 해야 될까요?
-
건우아빠
2014.01.16 15:36
쿼리를 보시면 모든 테이블을 조인을 하시 다음 집계를 내는 방식입니다.
가장 기본이 되는 내용을 먼저 집계를 내시고 결과에 조인하는 방식으로 하시면 좀더 속도가 개선 되지 않을까 생각됩니다.
-
ssunsori
2014.01.16 18:03
가장 기본적인 내용 이라면 ....
주소 / 가격 / 건물명 인데 ... 각 각 다른 테이블에 있어서요 ...
머리속으로는 이해는 가지만 .. 표현 하려니 난해한 기분이 들어요 ;;;
-
ssunsori
2014.01.17 10:44
결과 값의 대한 조인이라는 말씀이 ~
이해는 가지만 ... 참 난해? 한것이 시 / 구 / 동 / 번지 / 그리고 각각의 시구동번지 각각의 코드와 전부 합친 코드 이렇게 구분이 되어 있습니다.
그런데 시구동 / 각각의 코드 / 전부 합친 코드 요것이 모든 테이블에 있으면 좋겠지만 5개 테이블에서는 PNU 라는 전부 합치 코드가 있구요.
다른 테이블에서는 구 / 동 만 ... 이구요
다른 테이블 에서는 동 / 번지 만 있구요
아 ... 머리 아프다 ..
한가지만 여쭤 볼께요
1 번 과 2번 pnu 코드로 연결 하고
3번 테이블 부터 기타 아래로 아래로 여러테이블들을 꼬리물기로 조인 하는게 나을까요?
즉 , 3번 테이블 2번 테이블 pnu 연결
4번 테이블 3번 테이블 pnu 연결 ~ 이런식으로요
실 테이블 ,컬럼을 가지고 질문 하시면 안되는지 ?
굳이 예를 들어서 복잡하게 설명을 하시는 이유가 ?
문제 해석까지 유추해 가면서 달기가 난해하네요...
실 업무 내용을 같이 기술하시는게 좋습니다.