Получение sum () в другой отдельной строке MySQL - PullRequest
0 голосов
/ 17 июля 2010

Я искал разные вопросы по этому вопросу, но не смог найти ответ на свою проблему.

Это мой запрос:

SELECT SUM( lead_value ) AS lead_value_sum, count( DISTINCT phone ) AS SUM, referer
FROM leads t1
INNER JOIN leads_people_details t2 ON t1.lead_id = t2.lead_id
INNER JOIN user_to_leads t3 ON t1.lead_id = t3.lead_id
WHERE lead_date
BETWEEN 20100716000000
AND 20100716235959
AND t1.site_id =8
GROUP BY t1.referer

Я пытаюсь подвести итоговое значение только уникальных телефонных номеров. Счетчик (Отдельный телефон) на самом деле работает и дает мне количество уникальных телефонов для каждого реферера, но я не могу понять, как мне СУММИТЬ lead_value для уникальных телефонных номеров каждого реферера.

Буду признателен за любую помощь, которую вы можете мне дать, Eden

Редактировать: Структуры таблиц

CREATE TABLE user_to_leads
 (
user_idINT(10) NOT NULL,
lead_idINT(10) NOT NULL,
site_idINT(10) NOT NULL,
lead_value INT(10) NOT NULL
 )

CREATE TABLE leads
 (
lead_id INT(100) NOT NULL auto_increment ,
site_id INT(10) NOT NULL ,
lead_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
vaild_date TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
referer VARCHAR(255) NOT NULL,
KEYWORD VARCHAR(255) NOT NULL,
upsaleINT(11) NOT NULL DEFAULT '0' ,
vaild INT(2) NOT NULL,
PRIMARY KEY (lead_id),
KEY lead_date (lead_date)
 )


CREATE TABLE leads_people_details
 (
lead_id INT(100) NOT NULL auto_increment ,
fullnameVARCHAR(255) NOT NULL,
phone VARCHAR(12) NOT NULL ,
email VARCHAR(255) NOT NULL,
homeVARCHAR(255) NOT NULL,
browser VARCHAR(255) NOT NULL,
browser_version VARCHAR(100) NOT NULL,
resolutionVARCHAR(255) NOT NULL,
IPVARCHAR(255) NOT NULL,
statusVARCHAR(255) NOT NULL DEFAULT '0',
COMMENT text NOT NULL,
PRIMARY KEY (lead_id)
 )

1 Ответ

1 голос
/ 18 июля 2010

Вы говорите

Для конкретного реферера, телефона, lead_value всегда будет одинаковым

Исходя из ограниченной информации, которую вы предоставили, я думаю, что это должно дать правильный ответ. Если вы обновите свой вопрос запрошенной информацией, возможно, его можно будет улучшить.

SELECT SUM(lead_value ) AS lead_value_sum, count(phone ) AS phone_count, referer
FROM
(
SELECT DISTINCT lead_value, phone, referer
FROM leads t1
INNER JOIN leads_people_details t2 ON t1.lead_id = t2.lead_id
INNER JOIN user_to_leads t3 ON t1.lead_id = t3.lead_id
WHERE lead_date
BETWEEN 20100716000000
AND 20100716235959
AND t1.site_id =8
) derived
GROUP BY referer

Обновлено после публикации структуры таблицы

Я не совсем понимаю, почему у leads_people_details и leads есть первичный ключ и столбец auto_increment lead_id, к которому вы присоединяетесь? Это будет означать 1-1 отношения между приводит и приводит_популярные_детали? Если это так, то, вероятно, один из них не должен быть auto_increment, чтобы избежать возможности несогласованности идентификаторов без вашего понимания.

Также в таблице user_to_leads нет первичного ключа. Стоит ли один на user_id, lead_id, site_id? Кроме того, вы в настоящее время не фильтруете по siteid на этой таблице. Это намеренно? Если нет, если вы делаете это, это останавливает повторяющиеся записи? Если нет, то можете ли вы описать значение user_id в этой таблице? Вы ранее говорили, что для определенного referer,phone значение lead_value всегда будет одинаковым, может ли оно отличаться на user_id? Если это так, что следует использовать? Если нет, то почему user_id в этой таблице?

Предварительный запрос, который может быть ближе, находится здесь, но все еще есть неразрешенные запросы выше.

SELECT SUM(lead_value ) AS lead_value_sum, count(phone ) AS phone_count, referer
FROM leads t1
INNER JOIN leads_people_details t2 ON t1.lead_id = t2.lead_id
INNER JOIN user_to_leads t3 ON t1.lead_id = t3.lead_id  
               and t1.site_id = t3.site_id
WHERE lead_date
BETWEEN 20100716000000
AND 20100716235959
AND t1.site_id =8
...