Как объединить и сложить статистику просмотров по дням из двух таблиц?

130
16 апреля 2021, 01:00

Нужно объединить статистику из двух таблиц с группировкой по дням (day). p1, p2 - разделы сайта, здесь только для наглядности.

tbl_1:

p1 | day | p1_views | p1_clicks
-------------------------------
1  | 15  | 100      | 12
-------------------------------
1  | 16  | 98       | 8
-------------------------------
2  | 16  | 74       | 15
-------------------------------
2  | 17  | 50       | 5

tbl_2:

p2 | day | p2_views | p2_clicks
-------------------------------
7  | 14  | 50       | 1
-------------------------------
7  | 15  | 77       | 13
-------------------------------
8  | 15  | 10       | 0
-------------------------------
7  | 16  | 30       | 2

p1,p2 не важны, сгруппировать нужно по дням чтобы в выдаче было так:

day | p1_views | p1_clicks | p2_views | p2_clicks
-------------------------------------------------
14  | 0        | 0         | 50       | 1
-------------------------------------------------
15  | 100      | 12        | 87       | 13
-------------------------------------------------
16  | 172      | 23        | 30       | 2
-------------------------------------------------
17  | 50       | 5         | 0        | 0

Делаю так, со статистикой выходит беда, считается неверно всё, как только ни колдовал:

SELECT sum(tbl_1.p1_views) AS `p1_views`, sum(tbl_1.p1_clicks) AS `p1_clicks`, 
sum(tbl_2.p2_views) AS `p2_views`, sum(tbl_2.p2_clicks) AS `p2_clicks` 
FROM `tbl_1` LEFT JOIN tbl_2 ON tbl_1.day = tbl_2.day GROUP BY day
Answer 1
WITH cte AS ( SELECT day FROM tbl_1
              UNION 
              SELECT day FROM tbl_2 )
SELECT cte.day, 
       COALESCE(SUM(tbl_1.p1_views), 0)  p1_views, 
       COALESCE(SUM(tbl_1.p1_clicks), 0) p1_clicks, 
       COALESCE(SUM(tbl_2.p2_views), 0)  p2_views, 
       COALESCE(SUM(tbl_2.p2_clicks), 0) p2_clicks
FROM cte 
LEFT JOIN tbl_1 ON cte.day = tbl_1.day
LEFT JOIN tbl_2 ON cte.day = tbl_2.day
GROUP BY cte.day

Для MySQL 5 версии - переместить CTE в подзапрос.

READ ALSO
Отклонение в доступе к файлам

Отклонение в доступе к файлам

file_get_contents: failed to open stream: Permission denied

78
Редирект 301 в зависимости от ГЕО и типа устройства

Редирект 301 в зависимости от ГЕО и типа устройства

У меня есть веб-сайтНа нём есть ссылки редиректа на другой ресурс

105
Как получить ссылку на последнюю страницу блога WordPress?

Как получить ссылку на последнюю страницу блога WordPress?

Есть следующий код, который по-идее должен возвращать ссылку на последнюю страницу блога, однако он выводит ссылку на главную страницу блога...

116