2013-03-08 4 views
0

약간 복잡한 쿼리를 수행하려고하는데 조인 중 하나만 제외하고 예상되는 데이터를 얻지 못했습니다.MySQL - SUM 조인 된 테이블 열

내 시도

SELECT email.*, email_type.*, email_subtype.*, email_dailytotal.*, SUM(email_dailytotal.fullconversions - (email_dailytotal.duplicates + email_dailytotal.invalids)) as validleads, email_week.*, SUM(adjustment) as total_adjustment, email_costmethod.* 
FROM email 
LEFT JOIN email_type on email.type = email_type.type_id 
LEFT JOIN email_subtype on email_subtype.type_id = email_type.type_id 
LEFT JOIN email_dailytotal on email_dailytotal.email_id = email.email_id 
LEFT JOIN email_week on email_week.email_id = email.email_id 
LEFT JOIN email_costmethod on email_costmethod.costmethod_id = email.costmethod 
WHERE email.email_id = '12163' 
AND business IN ("group", "dead") 
AND agency="MFC" 
AND start_date >="2013-02-01" 
GROUP BY email.email_id, email_dailytotal.oeyearno 
ORDER BY email.email_id DESC 

I 얻을 거의 내가 가입 때 제외하고 원하는 email_dailytotalemail에 :

LEFT JOIN email_dailytotal on email_dailytotal.email_id = email.email_id 

나는 단지 모든 대신 email_dailytotal에서 행 중 하나를 얻을로 해당 캠페인의 행

나는이 기본 쿼리이 작업을 수행 할 수 있습니다

SELECT SUM(fullconversions) FROM email_dailytotal WHERE email_id = 12163 

결과가 27하지만 내 전체 쿼리에서 나는 1 될 일이 첫 번째 행을 얻을.

email_dailytotal의 최소화 구조는 다음과 같습니다

email_id | fullconversions | summarydate | 

그래서 캠페인의 매일 데이터를 포함에 따라서

12163 | 1 | 2013-02-27 
12163 | 10 | 2013-02-26 
12163 | 15 | 2013-02-25 
12163 | 1 | 2013-02-22 

내 내가 대신 매우 마지막 행을 얻고 가입 요약.

어디서 잘못 알 수 있습니까?

P. 나는이 질문 인 혼란에 대해 사과합니다, 나는 sqlfiddle를 만들려고했으나, 8000 자 이상의 스키마를 만들었 기 때문에 그것이 작동하지 않을 것이므로 누군가 대답하는데 도움이된다면 아래에 그것을 포함 시켰습니다.

나는 보통 테이블의 구조를 보여줄 것이지만 합리적인 표준으로 포맷하는 데 몇 시간이 걸릴 것입니다.

데이터

http://pastebin.com/NV0nAwrp

+1

이 모든 것을 제거하고 [SQL Fiddle] (http://sqlfiddle.com/)로 옮기십시오. – Kermit

+0

+1,이 놀라운 SQL Fiddle에 대해 들어 본 적이 없습니다. 좋은 생각입니다! – Daedalus

+0

@AarolamaBluenk - 질문에서 'P.S. 이 질문에 대한 혼란에 사과 드리며 sqlfiddle을 만들려고했으나 내 빌드 스키마가 8000자를 넘기 때문에 작동하지 않을 것입니다. 누군가 대답하는 데 도움이된다면 아래에 포함 시켰습니다. " – martincarlin87

답변

1

기본적인 문제는 SELECT 절과 GROUP BY 절은 일관성이 있다는 것입니다. 로 변경

봅니다 우선 다음과

SELECT email.email_id, 
    SUM(email_dailytotal.fullconversions - (email_dailytotal.duplicates + email_dailytotal.invalids)) as validleads, 
    SUM(adjustment) as total_adjustment 
... 
GROUP BY email.email_id 

MySQL은 당신이 같은 쿼리를 실행하지 않도록 나는 또한 ONLY_FULL_GROUP_BY sql_mode를 사용하는 것이 좋습니다.

+0

그래도 여전히 같은 수치를 얻고 있습니다. – martincarlin87