2017-03-03 517 views
2

我想在SQL Server中計算加權平均值。我知道有很多問題解決了這個問題,但是我有另外一個問題,我查詢了很多其他的列,如GROUP BY集合函數像sum()和avg()。SQL Server:加權平均值+ GROUP BY

這裏是我的查詢:

SELECT 
    AVG(tauftr.kalkek) AS 'PurchPrice', 
    SUM(tauftr.amount) AS 'Amount', 
    AVG(tauftr.price) AS 'SellingPrice', 
    tauftr.product AS 'Product', 
    auftrkopf.ins_usr AS 'Seller', 
    DATEPART(wk, auftrkopf.date) AS 'Week', 
    AVG([margin]) AS 'Margin' /* <--- THIS IS WRONG */ 
    /* CALCULATE HERE: WEIGHTED AVERAGE BETWEEN 'amount' and 'margin' */ 
FROM 
    [tauftr] AS tauftr 
JOIN 
    tauftrkopf AS auftrkopf ON tauftr.linktauftrkopf = auftrkopf.kopfnr 
WHERE 
    auftrkopf.[status] = 'L' 
    AND auftrkopf.typ = 'B' 
    AND auftrkopf.date >= '01.03.2017' 
    AND auftrkopf.ins_usr ='HS' 
GROUP BY 
    tauftr.product, auftrkopf.ins_usr, DATEPART(wk,auftrkopf.date) 

我想這可能是可能使用INNER JOIN一模一樣的WHERE條款,但我不想執行查詢兩次。我不知道要加入什麼字段...

是否有可能不創建表? (我沒有寫權限)

回答

7

假設你想加權平均保證金...

Select 
     ... 
     sum(amount*margin)/sum(amount) as 'Weighted Avg' 
     ... 
From ... 
Group By ... 

編輯 - 爲了避免可怕的鴻溝被零

case when sum(amount)=0 then null else sum(amount*margin)/sum(amount) end as 'Weighted Avg' 
+0

不錯!我被困在試圖找出他想用作體重的那一個。 – SqlZim

+0

@SqlZim陪審團仍然不在,OP可能正在尋找總WAM。 –

+0

有時你看不到簡單的解決方案-.- 謝謝!!! – Harper