我正在尝试计算SQL Server中的加权平均值。我知道有很多问题可以解决这个问题,但我还有一个额外的问题,即我使用 GROUP BY 和聚合函数<查询很多其他列/ strong>喜欢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)
我认为可以使用INNER JOIN
具有完全相同的WHERE
子句,但我不想执行两次查询。而且我不知道加入哪个领域...
没有创建表可以吗? (我没有写权限)
答案 0 :(得分:10)
假设你想要权衡平均保证金......
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'