2012-02-12 12 views
2

ので、私は私が販売相関サブクエリのmysqlの

Sale ID | Product ID | Quantity | Price 
===========+============+==========+============= 
1   | 1   | 1  | 55 
2   | 2   | 1  | 60 

を持つテーブルがあると私は購入

Batch ID | Total Value | Quantity | Product ID 
=========+=============+==========+================== 
1  | 100   | 100  | 1 
2  | 10   | 50  | 2 
3  | 1   | 1  | 2 

のテーブルを持っているのでしようとしてイム製品

Product ID | Product Name 
===========+=============== 
1   | Tissues 
2   | Glass 

を持つテーブルを持っていますクエリを使用して平均費用に基づいて利益を計算する

SELECT tblsale.product_id, 
     tblproduct.product_name, 
     SUM(tblsale.`quantity`) qty, 
     SUM(tblsale.`Price`*tblsale.`quantity`) sales, 
     (SELECT sum(total_value)/sum(quantity) VWAP 
     FROM tblpurchases 
     WHERE product_id = tblsale.product_id) average_price, 
     (average_price * qty) cost, 
     (sales-cost) profit 
FROM tblsale, tblproduct 
WHERE tblproduct.product_id = tblsale.`product_id` 
GROUP by tblsale.`product_id` 

しかし、私はそれは私が「平均価格は」不明列で取得する仕事を得るように見えることはできません、どのように私はあなたがこのクエリに手に入れたどのように正しく

+0

「合計値」と「数量」とは何ですか? –

+0

総額は、購入したすべての商品の価格であり、数量は商品の数量(その値/数量)がその特定のバッチの平均価格になります。 – Akshat

答えて

2

同じSELECT句で列エイリアスを参照することはSQLではサポートされていません。そのため、average_price列は1054エラーを返しています。サブセレクト、派生テーブル/インラインビューで必要な操作を実行するか、必要に応じて基礎となるロジックを再利用する必要があります。ここでは、ロジックの再利用の例です:

SELECT prod.product_id, 
      prod.product_name, 
      SUM(s.quantity) qty, 
      SUM(s.Price * s.quantity) sales, 
      SUM(pur.total_value)/SUM(pur.quantity) average_price, 
      SUM(pur.total_value)/SUM(pur.quantity) * SUM(s.quantity) cost, 
      SUM(s.Price * s.quantity) - (SUM(pur.total_value)/SUM(pur.quantity) * SUM(s.quantity)) profit 
    FROM tblproduct prod 
LEFT JOIN tblsale s ON prod.product_id = s.product_id 
LEFT JOIN tblpurchases pur ON pur.product_id = prod.product_id 
GROUP BY s.product_id 

私のクエリは、私はあなたのクエリが使用するANSI-89構文上をお勧めしている、ANSI-92 JOIN構文を使用しています。 this question for more detailsを参照してください。

+0

うーん、私は疑問に思っていた。これはインナーセレクトより速く実行されますか? –

+0

@MostyMostacho:サブセレクトのパフォーマンスは、ほとんどのデータベースで異なります。スカラーのパフォーマンスは同等です。しかし、他の人は行ごとに実行できるので(悪い)、チェックする必要があります。 –

+0

そう思っています。情報ありがとう: –

-1

をクエリを構築でしょうか?それは完全にオフです。クエリを書くときは、小さくしてから構築してください。あなたが今持っているクエリは完全な混乱であり、どこにも有効ではないところに、ランダムな括弧があります。どのようにあなたのクエリを読みやすくするために開始、使用のインデントを作るために

SELECT p.product_id, p.product_name 
     , SUM(s.quantity) number_of_sales 
     , SUM(s.price) total_profit 
     , SUM(pu.quantity) purchase_quantity 
     , SUM(pu.value) purchase_value 
     , (SUM(pu.quantity) - SUM(s.quantity)) number_in_stock 
     , (SUM(s.price) - SUM(pu.value)) profit 
     , (SUM(pu.value)/SUM(pu.quantity)) avarage_purchase_price 
     FROM product p 
LEFT JOIN sales s ON s.product_id = p.product_id 
LEFT JOIN purchase pu ON pu.product_id = p.product_id   
    GROUP BY s.product_id, pu.product_id 

しかし、私は 『平均価格は』不明列で取得し、それは仕事を得るように見えることはできません、う私は正確にクエリを構成します "

平均価格とは何ですか?どのように平均価格を計算したいですか? 「平均コスト」と同じです

+0

平均費用と平均価格は同じ平均ですレコードのすべての購入の加重平均コストを負担してください – Akshat

関連する問題