MySQL에서 “total”필드가 NULL 인 경우 0으로 설정하는 방법이 있습니까?
여기 내가 가진 것입니다 :
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으로 반환하려면 어떻게해야합니까?
답변
IFNULL 사용 :
IFNULL(expr1, 0)
설명서에서 :
expr1이 NULL이 아닌 경우 IFNULL ()은 expr1을 반환합니다. 그렇지 않으면 expr2를 반환합니다. IFNULL ()은 사용되는 컨텍스트에 따라 숫자 또는 문자열 값을 반환합니다.
답변
coalesce(column_name,0)
그냥 대신 사용할 수 있습니다 column_name
. 이 coalesce
함수는 목록에서 첫 번째 NULL이 아닌 값을 반환합니다.
이와 같은 행 단위 함수는 일반적으로 확장성에 문제가 있음을 언급해야합니다. 데이터베이스의 크기가 적당하다고 생각되면 추가 열과 트리거를 사용하여 비용을에서로 이동하는 select
것이 insert/update
좋습니다.
이것은 데이터베이스가 쓰여진 것보다 더 자주 읽히고 (대부분의 경우) 가정하는 비용을 상각합니다.
답변
위의 답변 중 어느 것도 나를 위해 완성되지 않았습니다. 필드 이름 field
이이면 선택기는 다음과 같아야합니다.
IFNULL(`field`,0) AS field
예를 들어 SELECT 쿼리에서
SELECT IFNULL(`field`,0) AS field, `otherfield` FROM `mytable`
이것이 누군가가 시간을 낭비하지 않도록 도울 수 있기를 바랍니다.
답변
이런 식으로 시도해 볼 수 있습니다
IFNULL(NULLIF(X, '' ), 0)
속성 X가 비어있는 문자열 인 경우 속성 X는 비어있는 것으로 가정 한 후 마지막 값 대신 0으로 선언 할 수 있습니다. 다른 경우에는 원래 값으로 유지됩니다.
어쨌든, 다른 방법으로 그렇게 할 수 있습니다.
답변
예 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;