计算单个查询中的加权平均值

Dar*_*ney 5 sql

示例数据:

table A
part    rating   numReviews
A308    100      7
A308    98       89
Run Code Online (Sandbox Code Playgroud)

我正试图获得上述数据的平均评分.

它需要的是每行的rating*numReviews除以总和的总和numReviews

这是我正在尝试但它给出了错误的结果(49.07,应该是98.15):

select part, 
cast((AVG(rating*numReviews)/sum(numReviews)) as decimal(8,2)) as rating_average
from A group by part order by part
Run Code Online (Sandbox Code Playgroud)

这可以在一个查询中完成吗?我正在使用SQL Server

Gor*_*off 16

回到加权平均的定义,所以使用sum()s和除法:

select part, sum(rating * numreviews) / sum(numreviews) as rating_average
from a
group by part
order by part;
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以将其转换为小数:

select part,
       cast(sum(rating * numreviews) / sum(numreviews) as decimal(8, 2)) as rating_average
from a
group by part
order by part;
Run Code Online (Sandbox Code Playgroud)