COALESCE не работает должным образом (mysql) - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь записать разбивку продаж и прибыли за месяц, и функция объединения не работает должным образом, то есть не меняет значение NULL в соответствии с тем, что я хотел бы.

Вотмой код:

SELECT  coalesce (extract(month from o.order_date),'Total year') AS mois, 
                sum(op.selling_price * op.quantity) AS 'Monthly sales',
                sum(op.selling_price * op.quantity) - sum(p.buying_price * op.quantity) AS 'Monthly Profit',
                count(r.return_id)
FROM order_products op
JOIN orders o
ON o.order_id = op.order_id
LEFT JOIN returns r
ON r.order_product_id = op.order_product_id 
JOIN products p
ON p.product_id = op.product_id
WHERE extract(year from o.order_date) = '2016'
GROUP BY mois
WITH ROLLUP;

При запуске этого кода в последней строке (свертке) по-прежнему отображается «NULL» в столбце «mois».

Есть идеи о том, что я мог пропустить?

Я пробовал использовать функцию ifnull, но у меня возникла та же проблема.

Спасибо!

1 Ответ

0 голосов
/ 09 декабря 2018

Поместите запрос с помощью свертки в подзапрос и используйте COALESCE в основном запросе.

SELECT COALESCE(mois, 'Total year') AS mois, `Monthly sales`, `Monthly Profit`, return_count
FROM (
    SELECT  extract(month from o.order_date) AS mois, 
                    sum(op.selling_price * op.quantity) AS 'Monthly sales',
                    sum(op.selling_price * op.quantity) - sum(p.buying_price * op.quantity) AS 'Monthly Profit',
                    count(r.return_id) AS return_count
    FROM order_products op
    JOIN orders o
    ON o.order_id = op.order_id
    LEFT JOIN returns r
    ON r.order_product_id = op.order_product_id 
    JOIN products p
    ON p.product_id = op.product_id
    WHERE extract(year from o.order_date) = '2016'
    GROUP BY mois
    WITH ROLLUP) AS x
...