2012-07-06 68 views
0

我有以下格式的數據:頻率分佈與加權平均

TYPE AMOUNT 
Book £2 
Pen £1 
Book £3 

我試圖輸出這是一個加權平均值:

TYPE Weighted Average 
Book 0.833333333 
Pen 0.166666667 

到目前爲止,我有:

Select TYPE, AMOUNT/SUM(AMOUNT) 
FROM MyTable 
Group by TYPE 

回答

3

這應該會給你想要的結果:

select type 
    , cast(sum(amount) as decimal(10,5))/(select sum(amount) from t) 
from t 
group by type 

Sql Fiddle for Demo

+0

這個偉大的工程。謝謝。順便說一句,我正在使用sqllite。 – jedd 2012-07-06 13:16:59

+0

+1。這並不重要,但如果'amount'已經被定義爲十進制,OP可能會刪除這個轉換。 – 2012-07-06 13:41:36

+0

@Lieven這是正確的,我只添加它基於提供的數據是所有'int's,所以我添加了'cast()' – Taryn 2012-07-06 13:44:26

0

這將工作

DECLARE @Table1 TABLE (TYPE VARCHAR(10),AMOUNT FLOAT) 
INSERT INTO @Table1 SELECT 'Book',2 UNION ALL SELECT 'Pen',1 UNION ALL SELECT 'Book',3 

DECLARE @Total FLOAT 
SELECT @Total=SUM(AMOUNT) FROM @Table1 

SELECT TYPE,SUM(AMOUNT/@Total) FROM @Table1 GROUP BY TYPE