Объединение таблиц по общей дате

193
31 января 2020, 05:20

Есть две выборки из таблиц с общим столбцом 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):

Answer 1

То, что вы ищете называется "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
READ ALSO
Помогите изменить форму плагина

Помогите изменить форму плагина

Кто нибудь работал с vue2-datapicker? Не получается придать ему форму как на скриншоте ниже

206
что сделать с nav чтобы оно не двигалось при hover?

что сделать с nav чтобы оно не двигалось при hover?

Здесь ссылка на кодпен, ячейки меню двигаются вниз при наведениии курсораКак сделать так, чтобы они оставались на месте ? Я добавил max-height,...

183
Jquery найти первые 3 слова и изменить стили

Jquery найти первые 3 слова и изменить стили

Есть много строк с примерно следующим содержанием:

195