未使用SET时,此SQL代码为何无法正确完成滑板车价格计算任务?
修正后的SQL实现方案
原代码存在两个核心问题:
- 子查询中直接混用聚合函数
AVG(price)与非聚合列,会触发语法或逻辑错误 - 需求中的「整体均价」是全店所有滑板车的均价,原代码的WHERE条件会错误地将均价计算范围限制为优质滑板车,不符合要求
以下是修正后的SQL代码:
SELECT brand, AVG(adjusted_price) AS avg_price FROM ( SELECT brand, price + (SELECT AVG(price) FROM scooters) AS adjusted_price FROM scooters WHERE model IS NOT NULL AND lights = TRUE ) AS filtered_scooters GROUP BY brand ORDER BY avg_price ASC;
关键修改说明:
- 用独立子查询
(SELECT AVG(price) FROM scooters)获取全店所有滑板车的整体均价,确保计算范围覆盖全部商品 - 子查询中为符合条件的优质滑板车单独计算调整后价格
adjusted_price,规避聚合函数与非聚合列的混用问题 - 给子查询指定别名
filtered_scooters,满足多数SQL数据库对FROM子句中子查询必须有别名的语法要求 - 外层查询基于调整后的价格计算各品牌的平均价格,最终按
avg_price升序排序
内容的提问来源于stack exchange,提问作者Autumn Theriault
相关产品推荐
相关产品推荐

