如何获取SQL查询返回的前3条GrossProfit记录的平均值?GROUP BY报错求助
解决方法:计算利润Top3电影的平均毛利
嘿,别担心!作为SQL新手遇到这种问题很正常,我来一步步帮你解决~
你之前尝试用GROUP BY出错,是因为GROUP BY的作用是对整张表的行按指定字段分组后聚合,但你的需求是先筛选出毛利最高的3条记录,再计算这3条的平均值——所以得先把目标数据筛选出来,再做聚合计算,而不是直接用GROUP BY。
下面给你两种简单易懂的实现方式:
方法1:使用子查询
子查询可以先帮我们拿到毛利Top3的记录,再在外层对这些记录求平均值:
SELECT AVG(GrossProfit) AS AvgTop3GrossProfit FROM ( -- 内层子查询:获取毛利最高的3条记录的GrossProfit字段 SELECT GrossProfit FROM Cinema ORDER BY GrossProfit DESC LIMIT 3 ) AS Top3Profits; -- 给子查询结果起个临时表名,方便外层调用
方法2:使用CTE(公共表表达式)
CTE的写法更清晰,适合新手理解逻辑,本质和子查询一样,只是把临时结果集提前定义出来:
-- 先定义CTE:存储毛利最高的3条记录的GrossProfit WITH Top3Profits AS ( SELECT GrossProfit FROM Cinema ORDER BY GrossProfit DESC LIMIT 3 ) -- 对CTE中的数据计算平均值 SELECT AVG(GrossProfit) AS AvgTop3GrossProfit FROM Top3Profits;
这两种方法都会先得到你想要的Top3毛利数据,再计算它们的平均值,完美解决你的问题~
内容的提问来源于stack exchange,提问作者gcat
相关产品推荐
相关产品推荐

