Czy w MySQL istnieje sposób na ustawienie zerowych pól „total”, jeśli mają wartość NULL?
Oto co mam:
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;
Dane są w porządku, z wyjątkiem pól NULL 0
.
Jak mogę zwrócić 0 dla NULL w MySQL?
Możesz użyć
coalesce(column_name,0)
zamiast po prostucolumn_name
.coalesce
Zwraca pierwszą wartość niezerowe na liście.Powinienem wspomnieć, że takie funkcje dla wierszy są zwykle problematyczne dla skalowalności. Jeśli uważasz, że Twoja baza danych może dostać się pokaźnych rozmiarów, często lepiej jest użyć dodatkowych kolumn i wyzwala przenieść koszt od
select
doinsert/update
.To amortyzuje koszt przy założeniu, że baza danych jest czytana częściej niż zapisywana (a większość z nich tak).
źródło
Żadna z powyższych odpowiedzi nie była dla mnie kompletna. Jeśli twoje pole ma nazwę
field
, więc selektor powinien być następujący:Na przykład w zapytaniu SELECT:
Mam nadzieję, że to pomoże komuś nie tracić czasu.
źródło
Możesz spróbować czegoś takiego
Zakłada się, że atrybut X jest pusty, jeśli jest pustym ciągiem, więc po tym można zadeklarować jako zero zamiast ostatniej wartości. W innym przypadku zachowałaby swoją pierwotną wartość.
W każdym razie, żeby dać inny sposób na zrobienie tego.
źródło
Tak, funkcja IFNULL będzie działać, aby osiągnąć pożądany rezultat.
źródło