У меня есть этот запрос:
SELECT
`t2`.`upc`,
FORMAT(SUM(`t2`.`qty`), 0) AS <COLUMN NAME>
FROM
(`orders` `t1`
JOIN `sales` `t2` ON ((`t2`.`order_id` = `t1`.`id`)))
WHERE <CONDITION>
GROUP BY `t2`.`upc`
, который работает, как ожидается, со следующим CONDITIONS
:
t1.`date_placed` > (CURDATE() - INTERVAL 42 DAY)
t1.order_status = 1
Я пытаюсь объединить эти отдельные запросы и получить их результаты длясоответствующий столбец = 0, если условие не было выполнено.
Это была моя попытка:
SELECT
`t2`.`upc`,
CASE
WHEN (`t1`.`date_placed` > (CURDATE() - INTERVAL 42 DAY))
THEN FORMAT(SUM(`t2`.`qty`), 0)
ELSE 0
END AS `qty_sold`,
CASE
WHEN t1.order_status = 1
THEN FORMAT(SUM(`t2`.`qty`, 0))
ELSE 0
END AS `order_qty`
FROM
`orders` `t1`
JOIN `sales` `t2` ON (`t2`.`order_id` = `t1`.`id`)
WHERE `upc`=1001 OR `upc`=1002 OR `upc`=1003
GROUP BY `t2`.`upc`;
таблица заказов:
+-----------+--------------+------------+
| id | date_placed |order_status|
+-----------+--------------+------------+
| 1 | 2019-02-22 | 1 |
+-----------+--------------+------------+
| 2 | 2019-02-22 | 1 |
+-----------+--------------+------------+
| 3 | 2018-02-22 | 2 |
+-----------+--------------+------------+
таблица продаж:
+-----------+--------------+------+-----+
| id | order_id | upc | qty |
+-----------+--------------+------+-----+
| 1 | 1 | 1001 | 1 |
+-----------+--------------+------+-----+
| 2 | 1 | 1002 | 1 |
+-----------+--------------+------+-----+
| 3 | 1 | 1003 | 1 |
+-----------+--------------+------+-----+
| 4 | 2 | 1001 | 3 |
+-----------+--------------+------+-----+
| 5 | 3 | 1001 | 2 |
+-----------+--------------+------+-----+
| 6 | 3 | 1002 | 1 |
+-----------+--------------+------+-----+
Ожидаемые результаты:
+-----------+--------------+------------+
| upc | qty_sold | order_qty |
+-----------+--------------+------------+
| 1001 | 4 | 4 |
+-----------+--------------+------------+
| 1002 | 1 | 1 |
+-----------+--------------+------------+
| 1003 | 1 | 1 |
+-----------+--------------+------------+
Что я делаю не так?Если то, что я пытаюсь сделать с операторами CASE
, невозможно, есть ли другой способ объединить эти запросы?
Буду признателен за любой совет:)