Как составить SQL-запрос на получение данных по рекламной кампании?

Всем привет!
Имеется небольшой рекламный кабинет, для которого требуется вести статистику: когда кликнули, когда показали, агреггация данных и тд.

Схема очень простая:
sMNkUEolS40.jpg

Пытаюсь получить рекламу с подсчитанными просмотрами и кликами на сегодняшнюю дату вот так:

SELECT SQL_NO_CACHE ads.id, COUNT(clicks.id) as clicks, COUNT(shows.id) as shows FROM ads
LEFT JOIN shows ON ads.id = shows.ad_id
LEFT JOIN clicks ON ads.id = clicks.ad_id
WHERE
DATE(shows.created_at) = '2014-02-24' AND
DATE(clicks.created_at) = '2014-02-24'
AND ads.id = 35;

Но такой результат не радует:
id	clicks	shows
35	196		196


Для любителей бодрого интерактива: sqlfiddle.

Спасибо!
  • Вопрос задан
  • 2790 просмотров
Решения вопроса 1
Satanpit
@Satanpit
Front-end developer
Вот так:
SELECT ads.id , COUNT(DISTINCT clicks.id)  as clicks, COUNT(DISTINCT shows.id) as shows 
FROM ads
LEFT JOIN shows ON ads.id = shows.ad_id AND DATE(shows.created_at) = '2014-02-24'
LEFT JOIN clicks ON ads.id = clicks.ad_id AND DATE(clicks.created_at) = '2014-02-24'
GROUP BY ads.id
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Satanpit
@Satanpit
Front-end developer
Можно воспользоваться подзапросом:
SELECT ads.id,
(SELECT COUNT(*) FROM `clicks` WHERE ad_id = ads.id AND DATE(created_at) = '2014-02-24' AND
DATE(created_at) = '2014-02-24') AS clicks,
(SELECT COUNT(*) FROM `shows` WHERE ad_id = ads.id AND DATE(created_at) = '2014-02-24' AND
DATE(created_at) = '2014-02-24') AS shows
FROM ads
WHERE ads.id = 35;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы