2012-06-21 3 views
2

SQL 쿼리에 문제가 있습니다. 지정된 주문에 항목이 포함되어 있으면 마녀는 하위 항목을 포함하지 않으며 총 주문 가격은 0입니다. 그렇지 않으면이 쿼리가 올바르게 작동합니다.LE + JOIN을 사용하여 SUM + 컴퓨팅으로 SQL 쿼리

SELECT o.`id`, o.`date`, c.`name`, 
     ((i.`quantity` * i.`price`) + 
     SUM(i.`quantity` * subi.`quantity_kg` * subi .`price`)) as total_price 
FROM `order` o 
JOIN `customer` c ON o.`id_customer`=c.`id` 
LEFT JOIN `order_item` i ON i.`id_order`= o.`id` 
LEFT JOIN `order_subitem` subi ON si.`id_product`= i.`id_product` 
GROUP BY o.`id` 

감사합니다.

답변

2

사용하여 하위 항목 필드에 ifnullcoalesce는 :

SELECT o.`id`, o.`date`, c.`name`, 
     ((i.`quantity` * i.`price`) + 
     SUM(i.`quantity` * coalesce(subi.`quantity_kg`, 0) * coalesce(subi .`price`, 0))) as total_price 

이 이러한 필드는 전체 계산을 파괴 널 끝나게되지 않습니다, 확인합니다. 예 : 널 (null) + 1 = null이

1
SELECT o.`id`, o.`date`, c.`name`, 
     ((i.`quantity` * i.`price`) + 
     SUM(i.`quantity` * IFNULL(subi.`quantity_kg`, 0) * IFNULL(subi .`price`, 0))) as total_price 
FROM `order` o 
JOIN `customer` c ON o.`id_customer`=c.`id` 
LEFT JOIN `order_item` i ON i.`id_order`= o.`id` 
LEFT JOIN `order_subitem` subi ON si.`id_product`= i.`id_product` 
GROUP BY o.`id` 

order_item이 있어야하는 경우이 테이블에 대해 INNER JOIN을 사용해야합니다.

1

나는 문제는 NULL을 받고하는 것은, 당신은 단순히 NULL의 경우 처리하기 위해 병합 기능을 필요로이 문제를 해결하려면 오히려, 0을 반환한다는 것입니다 의심 :

SELECT o.`id`, o.`date`, c.`name`, 
     ((i.`quantity` * i.`price`) + 
     SUM(i.`quantity` * coalesce(subi.`quantity_kg`, 0) * coalesce(subi .`price`, 0)) 
     ) as total_price 
FROM `order` o JOIN 
    `customer` c 
    ON o.`id_customer`=c.`id` LEFT JOIN 
    `order_item` i 
    ON i.`id_order`= o.`id` LEFT JOIN 
    `order_subitem` subi ON si.`id_product`= i.`id_product` 
GROUP BY o.`id`