Два запроса рядом - общий месяц / год (MYSQL) - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь поставить два запроса рядом, имея месяц и год между ними. Они работают идеально индивидуально.

Настольные ящики - Ищем ящики в месяц

SELECT count(*) AS Count_Boxes,
DATE_FORMAT(create_date, '%b') AS 'Month',
DATE_FORMAT(create_date, '%Y') AS 'Year'
FROM boxes
GROUP BY YEAR(create_date), MONTH(create_date);

Настольные заказы - Ищем заказы в месяц

SELECT count(*) as Count_Orders,
DATE_FORMAT(create_date, '%b') AS 'Month',
DATE_FORMAT(create_date, '%Y') AS 'Year'
FROM orders
GROUP BY YEAR(create_date), MONTH(create_date);

Я пробовал так много Способы использования LEFT JOIN, но ничего не получалось.

Есть предложения?

1 Ответ

0 голосов
/ 27 марта 2020

Вы можете присоединиться:

SELECT o.count_orders, b.*
FROM (
    SELECT count(*) AS Count_Boxes,
    DATE_FORMAT(create_date, '%b') AS mn,
    DATE_FORMAT(create_date, '%Y') AS yr
    FROM boxes
    GROUP BY YEAR(create_date), MONTH(create_date)
) b
INNER JOIN (
    SELECT count(*) as Count_Orders,
    DATE_FORMAT(create_date, '%b') AS mn,
    DATE_FORMAT(create_date, '%Y') AS yr
    FROM orders
    GROUP BY YEAR(create_date), MONTH(create_date)
) o ON o.mn = b.mn and o.yr = o.yr

Однако, если существует вероятность пропуска периода в любом из наборов данных, тогда другой подход использует union all:

SELECT 
    SUM(no_orders) count_orders,
    SUM(no_boxes) count_boxes,
    DATE_FORMAT(create_date, '%b') mn,
    DATE_FORMAT(create_date, '%Y') yr
FROM (
    SELECT create_date, 0 no_orders, 1 no_boxes FROM boxes
    UNION ALL       
    SELECT create_date, 1, 0 FROM orders
)
GROUP BY YEAR(create_date), MONTH(create_date)
...