2015-10-28 58 views
0

假設我有如下表:SQL查詢方案。

enter image description here

我的目標是顯示一個選擇的結果集,看起來像這樣:

enter image description here

這裏最棘手的部分是顯示AverageCostPerType列爲每一本書。

我知道如何獲得AverageCostPerType,它只是以下內容: SELECT avg(bookcost)as AverageCostPerType FROM BOOK GROUPBY BookType;

這將顯示3行,因爲我有3個不同的類型。我如何顯示每本書的averagecostpertype?

我會感謝您的幫助。

+0

你有沒有試圖找到一個解決方案了嗎?如果是這樣,告訴我們你已經嘗試過。現在你要求我們爲你設計一個解決方案,如果你幸運的話,有人可能會這樣做,但這不是真的。 –

回答

2

您可以在派生表計算出每BOOKTYPE平均值和join它原始表得到結果。

select book_num, t.booktype, x.avgcost, bookcost, x.avgcost-bookcost 
from tablename t join 
(select booktype, avg(bookcost) as avgcost from tablename group by booktype) x 
on t.booktype = x.booktype 
0
select b.*, 
     b2.AverageCostPerType, 
     b2.AverageCostPerType - b.BookCost as difference 
from book b 
join 
(
    SELECT BookType, avg(bookcost) as AverageCostPerType 
    FROM BOOK 
    GROUP BY BookType 
) b2 on b.BookType = b2.BookType 
+0

您應該更改爲'b.BookCost - b2.AverageCostPerType' – lad2025

4

你需要使用analytic functions

AVG每次的BookType

select b.*, avg(bookcost) over (PARTITION BY BookType) 
from book b 

AVG的所有書籍

select b.*, avg(bookcost) over() 
from book b 
3

可以使用aggregate功能與分析分區窗口獲得平均成本按書類型。

這允許您執行查詢而無需將表加入自己或使用嵌套的select語句。

Oracle Aggregate Functions

select Book_num, 
    BookType, 
    avg(BookCost) over(partition by BookType) as AverageCostPerType, 
    BookCost, 
    BookCost - avg(BookCost) over(partition by BookType) as Difference 
from YourBookTable