Как объединить 2 группы путем выбора операторов - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть 2 таблицы, 1 для бесплатных пользователей и 1 для платных пользователей, они оба отслеживают клики, мне нужно показывать для каждой партнерской ссылки, которые являются реферерами (доменами), пользователь иногда может быть бесплатным пользователем а иногда может быть платным пользователем, поэтому мне нужно объединить обе статистики из обеих таблиц.

этот запрос не работает:

SELECT ref,COUNT(ref) AS clicks 
FROM click_analytics_free 
WHERE link_id = '$link_id'
GROUP BY ref 
UNION ALL
SELECT ref,COUNT(ref) AS clicks 
FROM click_analytics_paid 
WHERE link_id = '$link_id '
GROUP BY ref

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Вы можете сделать агрегацию:

SELECT ref, 
       SUM(CASE WHEN flag = 'free' THEN 1 ELSE 0 END) AS free_click,
       SUM(CASE WHEN flag = 'paid' THEN 1 ELSE 0 END) AS paid_click
FROM (SELECT ref, 'free' as flag 
      FROM click_analytics_free 
      WHERE link_id = '$link_id '
      UNION ALL
      SELECT ref, 'paid' as flag 
      FROM click_analytics_paid 
      WHERE link_id = '$link_id'
     ) t
GROUP BY ref; 
0 голосов
/ 08 апреля 2020

Вы можете сделать union all и затем снова агрегировать:

SELECT ref, SUM(free_clicks), SUM(paid_clicks), 
       SUM(free_clicks + paid_clicks)
FROM ((SELECT ref, COUNT(ref) AS free_clicks, 0 as paid_clicks
       FROM click_analytics_free
       WHERE link_id = ?
       GROUP BY ref
      ) UNION ALL
      (SELECT ref, 0, COUNT(ref) AS paid_clicks
       FROM click_analytics_paid
       WHERE link_id = ?
       GROUP BY ref
      )
     ) c
GROUP BY ref;

? является заполнителем параметра. Ваш код должен использовать параметры, а не подбирать строки запроса.

...