2010-11-12 106 views
0

所以我想要做什麼:如何在沒有子查詢的情況下重寫此查詢?

我有一個表有一些商店的一些商品的價格,我想要做的是找到從該商店出售的所有商品的平均價格,並且在店內銷售的所有類似物品的總和。

我的欄目有:

  • ITEM_NO
  • 分支
  • 總金額

什麼是真正重要的是,我必須避免子查詢,所以我不能做這樣的事情:

SELECT DISTINCT branch AS postcode, item_no, avg_price 
FROM Prices 
NATURAL JOIN (SELECT branch, AVG(totalamount) avg_price FROM Prices GROUP BY branch) av 
WHERE sum > avg_price ORDER BY turnover DESC , branch; 

這正是我想要做的事情,但我必須做到沒有子查詢。

編輯1個問題:

在那裏派生和臨時表之間的差異?所以對於賦值,我不允許使用子查詢或臨時表,所以我的答案是否有這兩個?

+0

對於每個分支的平均價格,您可以使用自聯接和GROUP BY,而不是一個子查詢。但是我不清楚剩下的事情...... item_no和avg_turnover必須分支到什麼關係?主要關鍵是什麼?我們可以看到架構嗎? – bobince 2010-11-12 01:35:16

+0

@Sam ...只是注意:你使用的是所謂的派生表。子查詢是Select語句作爲where或Column的一部分。將派生表視爲從非索引視圖中進行選擇。 – 2010-11-12 01:41:27

+0

對於什麼數據庫?雖然它可能是MySQL ... – 2010-11-12 02:08:56

回答

0

您可以在同一個SELECT語句內的相同或不同列上指定多個聚合語句。要確切地看到我的意思是在網上看書。

http://msdn.microsoft.com/en-us/library/ms177677.aspx

+0

這有「家庭作業」寫在它上面。您可以使用臨時表(或SQL Server中的臨時變量)來完成,但使用一個使用子查詢的sql語句會更有效。 – SteveCav 2010-11-12 02:58:47

0

在這裏你可以怎麼做,

SELECT branch AS postcode, 
     item_no, 
     AVG(totalamount) avg_price , 
     SUM(totalamount) sum 
FROM prices 
WHERE SUM(totalamount) > avg_turnover 
ORDER BY avg_turnover DESC , 
     eatit_Order.branch 
GROUP BY branch, 
     item_no; 
+0

然後用樣本數據告訴我們結果應該如何。 – 2010-11-12 03:05:53