You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何用SQL计算各行业板块的收益率平均值并得到预期结果?

如何计算各行业板块的收益率平均值并关联到每只股票?

你当前的SQL代码无法得到预期结果,核心问题是分组逻辑错误:你按Stocks, Returns, Sector分组,这会让AVG(Returns)仅计算单只股票自身的收益率(每个股票的Returns是唯一分组项),而非整个板块的平均收益率。

正确解决方案

以下两种方法均可实现需求,根据你的数据库版本选择:

方法1:使用窗口函数(推荐,适用于MySQL 8.0+、PostgreSQL、SQL Server等现代数据库)

窗口函数可以直接在原表上按板块计算平均值,并将结果映射到每一行:

SELECT 
    Stocks,
    AVG(Returns) OVER (PARTITION BY Sector) AS Returns,
    Sector
FROM table1;
  • PARTITION BY Sector:将数据按行业板块分组
  • AVG(Returns) OVER (...):计算每个分组的平均收益率,并将该值填充到分组内的所有行

方法2:子查询关联(兼容旧版数据库)

先通过子查询计算各板块的平均收益率,再通过Sector字段关联原表:

SELECT 
    t1.Stocks,
    t2.SectorAvgReturns AS Returns,
    t1.Sector
FROM table1 t1
INNER JOIN (
    -- 子查询计算每个板块的平均收益率
    SELECT 
        Sector, 
        AVG(Returns) AS SectorAvgReturns
    FROM table1
    GROUP BY Sector
) t2 ON t1.Sector = t2.Sector;

验证结果

执行上述代码后,会得到与你预期完全一致的输出:

StocksReturnsSector
MS5.0IT
APPL5.0IT
GEICO5.0IT
PETRO8.5OIL
BP8.5OIL
Citiz7.0ENERGY
Utility7.0ENERGY

内容的提问来源于stack exchange,提问作者kumas srunk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 05:27:10