SQL View使用问题:查询高于平均营收电影类型的代码报错排查
问题诊断
你编写的代码存在2个核心错误,导致无法运行且不符合需求:
- 错误1:聚合函数不能直接在WHERE子句中使用
SQL的执行优先级为:FROM→WHERE→GROUP BY→ 聚合函数计算 →HAVING→SELECT→ORDER BY。你在WHERE sumpay > AVG(sumpay)中直接使用AVG(sumpay)时,WHERE阶段还没有完成全表数据的聚合计算,数据库无法识别这个平均值的数值,会直接抛出语法错误。 - 错误2:查询字段不符合需求要求
作业要求输出「电影类型+对应总营收」两个维度的内容,但你编写的查询语句仅SELECT sumpay,缺少了电影类型的name字段,即使语法修复也无法拿到符合要求的结果。
补充说明:你编写的视图创建语句逻辑是正确的,AS后的括号属于可选写法,不会引发运行错误。
修复后的查询代码
借助子查询提前计算所有类型的平均总营收,再做筛选即可:
SELECT name, sumpay FROM grossrevenue WHERE sumpay > (SELECT AVG(sumpay) FROM grossrevenue);
内容的提问来源于stack exchange,提问作者Joshua Fang
相关产品推荐
相关产品推荐

