如果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_name
。 coalesce
函数返回列表中的第一个非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;