Есть две выборки из таблиц с общим столбцом date:
Первая:
SELECT
COUNT(id) AS conversion,
DATE(created_at) AS created_at
FROM
sites_conversion
WHERE
site_id = 2 AND partner_id = 70 AND is_unique = 0
GROUP BY
DATE(created_at)
И вторая выборка:
SELECT
SUM(conversion_pay) AS conversion_pay,
SUM(orders_created) AS orders_created,
SUM(orders_paid) AS orders_paid,
SUM(earn_total) AS earn_total,
SUM(revolution) AS revolution,
DATE
FROM statistic
GROUP BY
DATE
Нужно объединить эти две выборки по дате таким образом, чтобы учитывались даты из обеих столбцов. При этом даты из первой таблицы может не быть во второй и наоборот. Каким объединением это можно сделать? Перепробовал все.
Сейчас запрос выглядит так:
SELECT
SUM(conversion_pay) AS conversion_pay,
SUM(orders_created) AS orders_created,
SUM(orders_paid) AS orders_paid,
SUM(earn_total) AS earn_total,
SUM(revolution) AS revolution,
conversion,
DATE
FROM statistic
LEFT JOIN(
SELECT
COUNT(id) AS conversion,
DATE(created_at) AS created_at
FROM
sites_conversion
WHERE
site_id = 2 AND partner_id = 70 AND is_unique = 0
GROUP BY
DATE(created_at)
) sites_conversion
ON
created_at = DATE
GROUP BY
conversion,
DATE
И результат не учитывает даты, которые есть во внутреннем запросе (нет дат 2019-04-13 и 2019-04-14):
То, что вы ищете называется "Full join", но он не поддерживается mysql. Вы можете эмулировать его объединив два запроса с помощью UNION. Вот пример с вашим запросом:
SELECT
SUM(conversion_pay) AS conversion_pay,
SUM(orders_created) AS orders_created,
SUM(orders_paid) AS orders_paid,
SUM(earn_total) AS earn_total,
SUM(revolution) AS revolution,
conversion,
DATE
FROM statistic
LEFT JOIN(
SELECT
COUNT(id) AS conversion,
DATE(created_at) AS created_at
FROM
sites_conversion
WHERE
site_id = 2 AND partner_id = 70 AND is_unique = 0
GROUP BY
DATE(created_at)
) sites_conversion
ON
created_at = DATE
GROUP BY
conversion,
DATE
UNION
SELECT
SUM(conversion_pay) AS conversion_pay,
SUM(orders_created) AS orders_created,
SUM(orders_paid) AS orders_paid,
SUM(earn_total) AS earn_total,
SUM(revolution) AS revolution,
conversion,
DATE
FROM statistic
RIGHT JOIN(
SELECT
COUNT(id) AS conversion,
DATE(created_at) AS created_at
FROM
sites_conversion
WHERE
site_id = 2 AND partner_id = 70 AND is_unique = 0
GROUP BY
DATE(created_at)
) sites_conversion
ON
created_at = DATE
GROUP BY
conversion,
DATE
Продвижение своими сайтами как стратегия роста и независимости