[sql] MySQL에서 필드가 null이면 0을 반환

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;


답변