Результаты запроса наполовину сразу после объединения двух таблиц - PullRequest
0 голосов
/ 27 июня 2018

Следующий запрос дал правильные результаты только для внутреннего запроса (post_engagement, покупки на веб-сайте), тогда как все остальные числа были неправильно увеличены во много раз. Есть идеи? Спасибо.

Схема двух таблиц:

Избранное_адрес (идентификатор, идентификатор кампании, название кампании, цель, показы, расходы)

Действия (id, ads_id, action_type, value)

SELECT
  f.campaign_id,
  f.campaign_name,
  f.objective,
  SUM(f.impressions) AS Impressions,
  SUM(f.spend) AS Spend,
  SUM(a.post_engagement) AS "Post Engagement",
  SUM(a.website_purchases) AS "Website Purchases"
FROM
favorite_ads f
LEFT JOIN (
     SELECT
          ads_id,
          CASE WHEN action_type = 'post_engagement' THEN SUM(value) END AS 
post_engagement,
      CASE WHEN action_type = 'offsite_conversion.fb_pixel_purchase' THEN SUM(value) END AS website_purchases
 FROM Actions a
 GROUP BY ads_id, action_type
) a ON f.id = a.ads_id
WHERE date_trunc('month',f.date_start) = '2018-04-01 00:00:00' AND 
date_trunc('month',f.date_stop) = '2018-04-01 00:00:00' --only get campaigns 
that ran in April, 2018
GROUP BY f.campaign_id, campaign_name, objective
Order by campaign_id

1 Ответ

0 голосов
/ 28 июня 2018

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

У вас уже есть несколько потенциальных клиентов в комментариях, которые вы должны рассмотреть в первую очередь.

Например, вы написали, что этот подзапрос возвращает правильные результаты:

SELECT ads_id,
       CASE
         WHEN action_type = 'post_engagement'
         THEN SUM(value)
       END AS post_engagement,
       CASE
         WHEN action_type = 'offsite_conversion.fb_pixel_purchase'
         THEN SUM(value)
       END AS website_purchases
  FROM Actions a
 GROUP BY ads_id, action_type

Это также дает правильные результаты:

SELECT ads_id,
       SUM(
         CASE
           WHEN action_type = 'post_engagement'
           THEN value
         END
       ) AS post_engagement,
       SUM(
         CASE
           WHEN action_type = 'offsite_conversion.fb_pixel_purchase'
           THEN value
         END
       ) AS website_purchases
  FROM Actions
 GROUP BY ads_id

Если это так, попробуйте заменить ваш подзапрос на этот.

Если у вас все еще есть проблема, то я бы проверил, правильное ли ваше условие соединения, как может показаться, что для кампании (campaign_id) вы могли бы иметь несколько записей с одинаковым id, что умножит результаты подзапроса - это зависит от того, что на самом деле является первичным ключом (или уникальным ограничением) в favorite_ads.

...