在MySQL中,如果它们是NULL,有没有办法将“total”字段设置为零?
这就是我所拥有的:
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
。
如何在MySQL中为NULL返回0?
答案 0 :(得分:268)
使用IFNULL:
IFNULL(expr1, 0)
来自文档:
如果expr1不为NULL,则IFNULL()返回expr1;否则返回expr2。 IFNULL()返回一个数值或字符串值,具体取决于使用它的上下文。
答案 1 :(得分:22)
您可以使用coalesce(column_name,0)
代替column_name
。 coalesce
函数返回列表中的第一个非NULL值。
我应该提一下,像这样的每行函数通常会对可伸缩性产生影响。如果您认为数据库的大小合适,通常最好使用额外的列和触发器将成本从select
转移到insert/update
。
假设您的数据库读取的次数多于写入的(并且大部分都是),这会降低成本。
答案 2 :(得分:5)
以上所有答案对我来说都不完整。
如果您的字段名为field
,则选择器应为以下选择器:
IFNULL(`field`,0) AS field
例如在SELECT查询中:
SELECT IFNULL(`field`,0) AS field, `otherfield` FROM `mytable`
希望这可以帮助别人不要浪费时间。
答案 3 :(得分:4)
您可以尝试这样的事情
IFNULL(NULLIF(X, '' ), 0)
如果属性X是空字符串,则假定它为空,因此在此之后您可以声明为零而不是最后一个值。在另一种情况下,它将保持其原始值。
无论如何,只是为了给出另一种方式。
答案 4 :(得分:4)
是的IFNULL功能将努力达到您想要的效果。
SELECT uo.order_id, uo.order_total, uo.order_status,
(SELECT IFNULL(SUM(uop.price * uop.qty),0)
FROM uc_order_products uop
WHERE uo.order_id = uop.order_id
) AS products_subtotal,
(SELECT IFNULL(SUM(upr.amount),0)
FROM uc_payment_receipts upr
WHERE uo.order_id = upr.order_id
) AS payment_received,
(SELECT IFNULL(SUM(uoli.amount),0)
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;
答案 5 :(得分:0)
尝试一下
从表名中选择Ifnull(sum(0 + ifnull(Mycolumn,0)),0)