2

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`

ご協力ありがとう御座います。

4

3 に答える 3

2

coalesceサブ項目フィールドでの使用ifnull:

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 になって計算全体が台無しになることがなくなります。例 null+1 = null

于 2012-06-21T14:54:06.877 に答える
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 を使用する必要があります。

于 2012-06-21T14:53:58.453 に答える
1

問題は、0 ではなく NULL が返されていることだと思います。これを修正するには、NULL のケースを処理するための合体関数が必要です。

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` 
于 2012-06-21T14:55:21.930 に答える