1

次のクエリで問題が発生しました。

SELECT sum(((ordered_items.price + ordered_items.vat) * ordered_items.qty) + orders.postage_price + orders.postage_vat) as total_price
FROM orders
JOIN ordered_items
ON orders.id_orders = ordered_items.order_id
GROUP BY orders.id_orders

送料込みの注文総額を元に戻すという発想です。

  • Ordered_items-注文されたすべてのアイテムが含まれます(複数の行が存在する可能性があります)
  • 注文-注文の送料が含まれます(ここでは注文ごとに1行のみになります)

私が抱えている問題は、注文に「ordered_items」に複数のアイテムが含まれている場合、上記の合計が「orders」の郵便料金を複数回カウントすることです。

郵便料金が1回だけカウントされるように、このクエリを書き直すにはどうすればよいですか?

助けてくれてありがとう。

4

3 に答える 3

2

サブクエリは必要ありません。postage_priceとvatを集計から移動し、それらをGROUPBYするだけです。

SELECT sum((ordered_items.price + ordered_items.vat) * ordered_items.qty) + orders.postage_price + orders.postage_vat as total_price
FROM orders
JOIN ordered_items
ON orders.id_orders = ordered_items.order_id
GROUP BY orders.postage_price, orders.postage_vat 
于 2012-12-21T14:41:11.350 に答える
1
SELECT items.total + orders.postage_price + orders.postage_vat) AS total_price
FROM orders
JOIN (SELECT order_id, SUM((ordered_items.price + ordered_items.vat) * ordered_items.qty) AS total
    FROM ordered_items
    GROUP BY order_id) items
ON orders.id_orders = items.order_id
于 2012-12-21T14:34:03.093 に答える
1

グループ化を追加する必要があります

GROUP BY ordered_items.order_id
于 2012-12-21T14:34:05.980 に答える