簡體   English   中英

SQL Server:加權平均 + GROUP BY

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM