В MySQL есть ли способ установить «итоговые» поля на ноль, если они равны NULL?
Вот что у меня есть:
SELECT uo.order_id, uo.order_total, uo.order_status,
(SELECT SUM(uop.price * uop.qty)
FROM uc_order_products uop
WHERE uo.order_id = uop.order_id
) AS products_subtotal,
(SELECT SUM(upr.amount)
FROM uc_payment_receipts upr
WHERE uo.order_id = upr.order_id
) AS payment_received,
(SELECT SUM(uoli.amount)
FROM uc_order_line_items uoli
WHERE uo.order_id = uoli.order_id
) AS line_item_subtotal
FROM uc_orders uo
WHERE uo.order_status NOT IN ("future", "canceled")
AND uo.uid = 4172;
Данные получаются нормально, кроме полей NULL 0
.
Как я могу вернуть 0 для NULL в MySQL?
Вы можете использовать
coalesce(column_name,0)
вместо простоcolumn_name
.coalesce
Функция возвращает первое значение , не NULL в списке.Следует отметить, что подобные функции для каждой строки обычно проблематичны для масштабируемости. Если вы считаете , что ваша база данных может получить быть приличного размера, часто лучше использовать дополнительные столбцы и триггеры , чтобы переместить стоимость от
select
доinsert/update
.Это амортизирует стоимость, если предположить, что ваша база данных читается чаще, чем записывается (и большинство из них).
источник
Ни один из приведенных выше ответов не был для меня полным. Если ваше поле названо
field
, то селектор должен быть следующим:Например, в запросе SELECT:
Надеюсь, что это может помочь кому-то не тратить время.
источник
Вы можете попробовать что-то вроде этого
Атрибут X считается пустым, если он является пустой строкой, поэтому после этого вы можете объявить ноль вместо последнего значения. В другом случае он останется в своем первоначальном значении.
Во всяком случае, просто чтобы дать другой способ сделать это.
источник
Да, функция IFNULL будет работать для достижения желаемого результата.
источник