2011-02-02 6 views
0

私は2つのテーブルを持っていますが、そのうちの1つはアイテムの初期ディスカウントを保持し、もう1つは店員が初期ディスカウントに加えてそのアイテムに与える割引を保持します。任意の数の品目を販売することができ、割引が適用される。アイテムの割引を得る方法

私がここでやろうとしているのは、group by order_idで、割引の総ドル額を取得します。私はこれが正しいわけではありません。なぜなら、それぞれの商品が50%割引された$ 10.00の購入で、約$ 5のものが必要になると、19セントになるからです。

これはどのように計算されますか?

SUM(price*quantity)*(SUM(a.discount)+b.discount) AS discount 
+4

テーブル構造とは何ですか? – Merijn

+0

あなたの数学が間違っているような音 – diagonalbatman

+0

はい、アンディ、私は信じています。私が明らかにしていないのは、店員が、合計で125%の割引となる「SUM()」を使って、25%割引で5つのディスカウント商品を私の数学で言うということです。 –

答えて

1

は、単一の注文項目について、あなたは、価格、数量、初期値引き(それはゼロかもしれないけれども、すべての注文の割引は、常にある)と、特定の順序の項目に関連付けられたオプションの割引を持っています。つまり、表はORDERとORDER_IITEMSです。割引は、あなたはおそらくに基づいて計算必要 、画分(0.000 ... 1.000)として格納されていることを考える:単一の項目の割引を得るために

(price * quantity * (initial_discount + optional_discount)) 

を。その式全体に集約します。だから、あなたのようなもので終わる:SUMの列名にエイリアスを適用

SELECT Order_ID, SUM(price * quantity * (initial_discount + optional_discount)) 
    FROM Orders AS O 
    JOIN Order_Items AS I ON O.Order_ID = I.Order_ID 
GROUP BY Order_ID; 

SELECT Order_ID, SUM(I.price * I.quantity * 
        (O.initial_discount + I.optional_discount)) AS discount 
    FROM Orders AS O 
    JOIN Order_Items AS I ON O.Order_ID = I.Order_ID 
GROUP BY Order_ID; 
+0

@Jonathan、ありがとう。あなたが言うように、最初の割引が適用されるかどうかは同じです。割引がない場合、ユーザーは0.00を入力します。オプションの割引は、テーブルが結合されたときに認識されます。私はその時点で2つの割引列を持っています。店員は、最初の割引を与えるかどうかを決めることができます。両方の割引は全くオプションです。適用される割引は任意であり、裁量は店員に委ねられます。 –

+0

@ジョナサン、私は割引のテーブルがないことを言及するのを忘れてしまった。割引は、orderおよびitem_orderテーブルのフィールドです。 –

+0

@Jim:あなたが記述し終わったシンプルなスキーマ与えられ、計算が(!かなり)簡単です - と私はそれを反映するために私の答えを編集しました。しかし、問題の詳細を完全に伝えることがいかに重要であるかを示しています。問題を正確に述べていないと、人々はあなたを正確に助けることができません。 –

関連する問題