如果MySQL中的字段为空,则返回0

在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

如何在MySQL中返回NULL作为NULL?

使用IFNULL :

 IFNULL(expr1, 0) 

从文档:

如果expr1不是NULL,则IFNULL()返回expr1; 否则返回expr2。 IFNULL()返回一个数字或string值,具体取决于它使用的上下文。

你可以使用coalesce(column_name,0)而不是column_namecoalesce函数返回列表中的第一个非NULL值。

我应该提到像这样的每行函数通常对于可伸缩性是有问题的。 如果你认为你的数据库可能会有一个体面的大小,通常使用额外的列和触发器将成本从select移动到insert/update通常会更好。

假设您的数据库读取次数比写入次数多(这些数据大部分是这样的),这会使成本相抵消。

你可以尝试这样的事情

 IFNULL(NULLIF(X, '' ), 0) 

如果属性X是一个空string,则假定属性X为空,所以在此之后,可以声明为零而不是最后一个值。 在另一种情况下,它将保持其原始价值。

无论如何,只是为了给另一种方式来做到这一点。

是的IFNULLfunction将努力实现您想要的结果。

 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;