Har*_*per 4 sql t-sql sql-server
我试图计算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)
Run Code Online (Sandbox Code Playgroud)
我想可以使用INNER JOIN
完全相同的WHERE
子句,但我不想执行两次查询.我不知道在哪个领域加入......
没有创建表可以吗?(我没有写权限)
Joh*_*tti 12
假设你想要Weighed Avg Margin ...
Select
...
sum(amount*margin)/sum(amount) as 'Weighted Avg'
...
From ...
Group By ...
Run Code Online (Sandbox Code Playgroud)
编辑 - 避免可怕的Divide-by-Zero
case when sum(amount)=0 then null else sum(amount*margin)/sum(amount) end as 'Weighted Avg'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4109 次 |
最近记录: |