0

1 対多の関係を持つ 2 つのテーブル (orders、order_lines) があります。注文テーブルには 1 つの行があり、order_lines テーブルには注文に関連付けられた各製品に対して 1 つの行があります。

注文

   +----------+-------------+---------------+
   |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  |
   +----------+-------------+-------+

ORDERS テーブルの total_order & shipping_total 列と、ORDER_LINES テーブルの volume & price 列を合計したいと思います。

クエリは現在機能していません:

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;

このクエリは間違った値を返しています。理由はわかりますが、適切なクエリの書き方がわかりません...助けてください。

4

2 に答える 2

3

集計関数 line を使用する場合、合計を計算するためSUMに使用する列を SQL サーバーに伝える必要がありますGROUP BY

したがって、クエリの最後に次を追加すると、次のようになります。

GROUP BY
  b_orders.bill_country, b_orders.ship_country

これにより、データ内の一意の組み合わせごとに合計が得られますbill_country, ship_country。これはあなたが探しているものですか?

于 2012-04-06T20:40:04.927 に答える
0

bill_country と ship_country を、SUM などの集計関数も含むクエリに含める場合は、それらをグループ化する必要があります。必要なのは、最後に次の行を追加することだけだと思います。

GROUP BY  b_orders.bill_country, b_orders.ship_country;

それらを表示する必要がない場合は、SELECT ステートメントからそれらを削除して、グループ化を省略できます。列を選択して WHERE 句に含める必要はありません。

于 2012-04-06T20:44:58.220 に答える