SQL Server:加权平均值+ GROUP BY

时间:2017-03-03 18:37:45

标签: sql sql-server tsql

我正在尝试计算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子句,但我不想执行两次查询。而且我不知道加入哪个领域...

没有创建表可以吗? (我没有写权限)

1 个答案:

答案 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'