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

SQL查询报错求助:计算学生平均分返回结果行数不符

排查SQL语句的潜在问题

以下是可能导致结果行数不符合预期的几个关键点:

  • 分组前的分数过滤逻辑错误
    当前WHERE score >= 0.9会在分组前直接剔除单场考试分数低于0.9的记录。如果你的预期是统计参加了两场考试且平均分达标的学生,而非单场分数都达标,这个条件应该放到HAVING子句中,改为HAVING ROUND(AVG(score), 2) >= 0.9——这样会先计算两场考试的平均分,再过滤出平均分达标的学生,避免提前剔除部分有效记录。

  • 未限制学生必须参加两场指定考试
    现有查询会包含只参加了English Test或History Test其中一场且分数>=0.9的学生。如果预期的11行是同时参加了两场考试的学生,需要在分组后添加HAVING COUNT(DISTINCT test_name) = 2,确保每个分组的学生都有两场考试的记录。

  • GROUP BY子句冗余(非核心问题,但可优化)
    如果id是students表的主键,GROUP BY id就足够唯一标识每个学生,first_name和last_name不需要加入GROUP BY(多数现代SQL引擎支持非聚合列在SELECT中只要被主键唯一确定),不过这个不会直接影响结果行数。

修正后的示例SQL(假设需要同时满足参加两场考试且平均分>=0.9):

SELECT
  first_name,
  last_name,
  ROUND(AVG(score), 2) AS avg_score
FROM students
WHERE test_name IN ('English Test', 'History Test')
GROUP BY id, first_name, last_name
HAVING COUNT(DISTINCT test_name) = 2
   AND ROUND(AVG(score), 2) >= 0.9
ORDER BY avg_score DESC;

内容的提问来源于stack exchange,提问作者Mariz Papas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:52:06