2013-03-08 5 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 

Я получаю почти то, что я хочу, за исключением того, когда я присоединяюсь email_dailytotal к email:

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.S. Я прошу прощения за беспорядок, который является этим вопросом, я попытался создать 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 

Я также рекомендую использовать ONLY_FULL_GROUP_BY sql_mode поэтому MySQL не позволит вам выполнять запросы, как это.

+0

спасибо, все же получая одинаковые цифры. – martincarlin87

Смежные вопросы