Вы говорите
Для конкретного реферера, телефона,
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