En MySQL, ¿hay alguna forma de establecer los campos "totales" en cero si son NULL?
Esto es lo que tengo:
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;
Los datos salen bien, excepto que los campos NULL deberían serlo 0
.
¿Cómo puedo devolver 0 para NULL en MySQL?
Puedes usar en
coalesce(column_name,0)
lugar de solocolumn_name
. Lacoalesce
función devuelve el primer valor no NULL de la lista.Debo mencionar que las funciones por fila como esta suelen ser problemáticas para la escalabilidad. Si cree que su base de datos puede llegar a tener un tamaño decente, a menudo es mejor usar columnas y disparadores adicionales para mover el costo del
select
alinsert/update
.Esto amortiza el costo asumiendo que su base de datos se lee con más frecuencia que se escribe (y la mayoría de ellos lo hacen).
fuente
Ninguna de las respuestas anteriores fue completa para mí. Si se nombra su campo
field
, entonces el selector debería ser el siguiente:Por ejemplo en una consulta SELECT:
Espero que esto pueda ayudar a alguien a no perder el tiempo.
fuente
Puedes probar algo como esto
Se supone que el atributo X está vacío si se trata de una cadena vacía, por lo que después de eso puede declarar como cero en lugar del último valor. En otro caso, seguiría siendo su valor original.
De todos modos, solo para dar otra forma de hacerlo.
fuente
Sí, la función IFNULL funcionará para lograr el resultado deseado.
fuente