[英]SQL Server: weighted average + GROUP BY
我正在嘗試在 SQL Server 中計算加權平均值。 我知道有很多問題可以解決這個問題,但我還有一個額外的問題,即我使用GROUP BY和 sum() 和 avg() 等聚合函數查詢了很多其他列。
這是我的查詢:
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)
我想可以使用完全相同的WHERE
子句使用INNER JOIN
,但我不想執行查詢兩次。 而且我不知道要加入哪個字段...
是否可以不創建表? (我沒有寫權限)
假設您想要加權平均保證金......
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'
編輯 2 - NullIf()
...
sum(amount*margin)/NullIf(sum(amount),0) as 'Weighted Avg'
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.