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

面试SQL技术问题:下述SELECT查询语句存在哪些错误?

这条SQL查询的错误解析

嘿,这问题我之前面试也碰到过类似的,给你掰扯清楚哈!

这条SQL的核心错误在于在WHERE子句中使用了聚合函数AVG(marks),具体原因如下:

  • WHERE子句的作用是在分组(GROUP BY)之前筛选单个行数据,这时候分组还没执行,聚合函数(比如AVG)的计算结果根本还没生成,数据库没办法用一个还不存在的聚合值去筛选原始行。
  • 要对分组后的聚合结果进行筛选,必须用HAVING子句——它是专门用来在分组完成后,对分组的聚合结果做过滤的,这时候AVG(marks)已经计算出每个科目的平均分了,就能正常判断是否大于75。

修正后的正确SQL

SELECT subject_code, AVG(marks) 
FROM students 
GROUP BY subject_code
HAVING AVG(marks) > 75;

如果想让代码更清晰,还可以给聚合列起个别名,这样HAVING子句里读起来更直观(大部分主流数据库都支持这种写法):

SELECT subject_code, AVG(marks) AS average_marks
FROM students 
GROUP BY subject_code
HAVING average_marks > 75;

内容的提问来源于stack exchange,提问作者Frank Serkland

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:01:38