5개의 테이블 에서 원하는 컬럼만 join 으로 가져왔는데요.
마지막에 sum(convert(bigint,sum_amt)) 로 합계를 넣었습니다.
합계를 위한 중복 제거를 위해서 group by 로 묶어 주구요.
근데 ... 조인이라서 그런가요?
묶이는 것도 없는데 합계가 2배 그리고 어떤것은 4배 정도로 합계가 구성 되더군요...
join , group by , sum 으로 합계를 하면 않되는 건가요?
Comment 6
-
Hisory
2014.04.14 14:25
-
ssunsori
2014.04.14 15:15
아 ~
감사합니다.
근데 .. 머리가 복잡해 지는군요 ... sub 쿼리에 넣어서 이용하기가.. 에매한데말이죠 ...
감사합니다.
-
이스트럭(강동운)
2014.04.14 16:12
안녕하세요~!
조인을 5개 테이블로 하신다면.. 어느 단계에서 뻥튀가가 되는지 알기 쉽지 않습니다.
이럴 때는.. 조인되는 테이블을 2개부터 ..3개.. 4개 ... 이런 식으로 늘려가면서.. 어느단계에서 뻥튀가가 되는지 파악하셔야 합니다.
그리고 파악이 되신다면.. distinct 를 활용하셔서 중복을 제거하고 우선 sum을 하신다음에.. 서브쿼리로 묶어서 처리하시면 됩니다.
혹은 중복이 되기전까지의 테이블만 조인을 한 뒤에.. 그 값으로 우선 SUM을 구하고...
이걸 서브쿼리로 묶어 나머지 테이블과 조인하시면 되겠습니다.
아래 쿼리는 잘못 나올 수 있는 예를 보여드리고 있습니다.
CREATE TABLE x
(
idx_x int
, point int
, primary key(idx_x)
)
GO
CREATE TABLE y
(
idx_y int
, idx_x int
, primary key(idx_y)
)
GO
INSERT INTO x values(1,100)
INSERT INTO x values(2,50)
INSERT INTO x values(3,20)
INSERT INTO y values(1,1)
INSERT INTO y values(2,1)
INSERT INTO y values(3,1)
INSERT INTO y values(4,2)
INSERT INTO y values(5,2)
INSERT INTO y values(6,3)
INSERT INTO y values(7,4)
select
x.idx_x
, SUM(point) as sum_point
, COUNT(*) as total_count
, SUM(point) / COUNT(*) AS total
from x
inner join y on x.idx_x = y.idx_x
group by x.idx_x
idx_x sum_point total_count total1 300 3 1002 100 2 503 20 1 20감사합니다 ^^ -
ssunsori
2014.04.14 16:21
감사합니다.
상세설명 까지 ~
많은것을 배움니다. ㅜㅜ
-
ssunsori
2014.04.15 10:19
깨우침을 느껴... 진행 하다가 .. 다시 좌절 .. 모드 ㅜㅜ
4개의 테이블에서는 아파트 동 / 호 / 가격 외 정보가 들어 있구요.
하나의 테이블에서는 "층" 이 있습니다.
동일 한 동 에 층별 호수를 전부 묶어서 합계를 내야하는데 .. 이것을 묶는 방법은
층 밖에 없어서... 그리고 층 표현 하는 그 테이블에서 합계 뻥튀기 ..
아 .. 다시 난감하네요...
-
ssunsori
2014.04.15 12:06
머리를 아무리 굴려도 방법이 생각이 않나서 ..
sum(convert(bigint,sum_amt)/2) 해버렸습니다;;;;;;;
현제까지 .. 합계는 맞게 나오는데 ...
추후 문제않생기겠죠?
ㄷㄷ;;;;;
일단 지켜봐야 할듯 싶네요.
1:n 관계에서 join 후 group by 하면 n배의 값이 나오는건 당연합니다.
굳이 join 후 group by 후 원하는 값을 뽑아내실려면...
sub 쿼리를 사용하거나 임시 테이블에 넣은후 다시 sum 값을 뽑아내는 방식으로 하셔야될듯합니다.