【问题标题】:Finding the Weighted Average in a Query在查询中查找加权平均值
【发布时间】:2019-10-06 20:35:45
【问题描述】:

问题是:对于上一个 Track,按国家计算加权平均(而不是平均)平均收益率(收益率定义为股息除以价格,并以百分比形式报告)。加权平均值包括作为权重的股票数量。 但我不知道如何找到加权平均值。

我已经有一些代码用于计算以百分比为单位的平均收益率。但是我在计算加权平均值时遇到了麻烦。我和一些同学交谈,他们说他们正在尝试使用公式: sum(x*w)/sum(w) 其中 w 是重量。 但我无法在我的代码中实现这一点

SELECT Nations.nationName, 
AVG(dividend/price) AS Yield
FROM Shares, Nations
WHERE Shares.nationID=Nations.ID
GROUP BY Nations.nationName;

最后加权平均值应该是计算机,但我只是不知道如何在代码中实现它。我们应该根据这个问题来解决这个问题的材料没有帮助。

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    我没听错,你应该考虑:

    SELECT 
        n.nationName, 
        SUM(s.quantity * s.dividend / s.price)/IIF(SUM(s.quantity) = 0, NULL, SUM(s.quantity)) AS weighted_yield
    FROM Shares s
    INNER JOIN Nations n ON s.nationID = n.ID
    GROUP BY n.nationName;
    

    注意事项:

    • 总是更喜欢显式的JOINs 而不是老式的隐式JOINs
    • 此外,使用表别名是一种最佳做法,因为它们使查询更短且更易于理解

    【讨论】:

    • 非常感谢您的工作。但我想知道您为什么选择这三个属性(数量、股息和价格)来计算加权平均值。
    • @AnaLiquid:您的查询中已经存在股息和价格,并且您的问题提到您想使用数量作为重量,所以...
    • @GMB MS Access 不幸不支持nullif
    • @LeeMac:是的,正确,我将查询改为使用IIF()