如何用SQL按品牌计算手机平均成本并生成带均值的全量结果
实现每行数据附带对应品牌平均成本的SQL写法
方法一:使用窗口函数(推荐,高效简洁)
利用窗口函数AVG() OVER (PARTITION BY ...)可以在不聚合原表数据的前提下,按品牌分组计算平均成本并附加到每一行:
SELECT *, AVG(cost) OVER (PARTITION BY brand) AS brand_avg_cost FROM Phone;
PARTITION BY brand:将表数据按brand字段分组AVG(cost) OVER (...):在每个品牌分组内计算成本的平均值,并将该值填充到当前分组的每一行中,最终保留原表所有行数据。
方法二:使用关联子查询(兼容老版本数据库)
如果你的数据库不支持窗口函数,可以通过关联子查询实现:
SELECT p.*, (SELECT AVG(cost) FROM Phone WHERE brand = p.brand) AS brand_avg_cost FROM Phone p;
- 对原表的每一行记录,通过子查询匹配相同
brand的所有数据,计算其平均成本并作为新列返回。不过此方法在数据量较大时,性能不如窗口函数。
内容的提问来源于stack exchange,提问作者Galaxy S
相关产品推荐
相关产品推荐

