1対多関係の2つのテーブル(orders、order_lines)があります。 orders表には1つの行があり、order_lines表にはその注文に添付された各製品ごとに1つの行があります。私はORDER_LINESテーブルにtotal_orderに& shipping_total ORDERS表の列とボリューム&価格の列を合計したい異なるテーブルの複数の列を合計するMYSQLクエリ
ORDERS
+----------+-------------+---------------+
|order_num | total_order | shipping_total|
+----------+-------------+---------------+
| 12345 | 75.00 | 15.00 |
+----------+-------------+---------------+
ORDER_LINES
+----------+-------------+-------+
| order_num| volume | price |
+----------+-------------+-------+
| 12345 |10 |25.00 |
+----------+-------------+-------+
| 12345 |20 |25.00 |
+----------+-------------+-------+
| 12345 |20 |25.00 |
+----------+-------------+-------+
。現在動作していない
問合せ:
SELECT b_orders.bill_country, b_orders.ship_country
, SUM(volume) AS v, SUM(price) AS pt
, SUM(shipping_total) AS st, SUM(total_order) AS tot_o
FROM b_orders
JOIN b_order_lines
ON b_orders.order_num = b_order_lines.order_num
WHERE DATE(b_orders.order_date) BETWEEN '2012-04-02' AND '2012-04-06'
AND ship_country = 'USA'
AND b_order_lines.price > 0;
このクエリは、間違った値を返しています。なぜ私は知っているのですか?しかし、適切なクエリを書く方法がわからない...助けてください。
総額または総額を指定しますか?注文またはPR。国? – barsju
結合によって生成された中間テーブルは、total_orderおよびshipping_totalにそれぞれ同じ値を持つ3つの行を作成します。だからあなたのSUM()はこれらの量を3倍にカウントしますが、正しい量の合計を返します。このような価格を追加することは私には意味がありません。一般的に、同じクエリ内のヘッダテーブル(ORDERS)とディテールテーブル(ORDER_LINES)の間でSUM()を実行する必要はありません。 –
ああ、私はその価格が私がextended_priceと呼ぶものだと思っています。それは私が見ることができないボリューム*単価の列です。 –