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

SQL数学查询求助:查询2000年avg_math_4_score低于250的州报错

问题分析与修正方案

现有代码的错误点

  • 逻辑错误1:CTE中GROUP BY state后得到的AVG_STATES本来就是每个州2000年的平均数学成绩,但后续你用naep, AVR_ST做了无条件笛卡尔积,两张表没有关联条件,输出结果会完全混乱
  • 逻辑错误2:筛选条件写反,需求是找平均成绩低于250的州,你写的250 < AVG_STATES实际是筛选平均成绩高于250的州
  • 语法错误:你给出的报错信息里AVG()是空参数,说明你实际执行的代码漏了给avg函数传入要计算的字段,和你贴出的代码不一致,PostgreSQL不支持无参数的avg函数
  • 冗余逻辑:不需要额外关联原naep表,CTE里已经包含了计算需要的所有维度

正确写法

不需要写得过于复杂,直接按州分组筛选即可:

SELECT state AS below_250
FROM naep
WHERE year = '2000'
GROUP BY state
HAVING AVG(avg_math_4_score) < 250;

如果要保留CTE的写法,修正后如下:

WITH AVR_ST AS (
    SELECT state, avg(avg_math_4_score) AS AVG_STATES
    FROM naep
    WHERE year = '2000'
    GROUP BY state
)
SELECT state AS below_250
FROM AVR_ST
WHERE AVG_STATES < 250;

写法说明

  • 先筛选出2000年的所有记录,按州分组计算每个州的avg_math_4_score平均值
  • 用HAVING子句对分组后的聚合结果做筛选,只保留平均值低于250的州
  • 直接返回州名并将别名设置为below_250即可,不需要额外加DISTINCT,因为GROUP BY已经保证每个州只有一条记录

内容的提问来源于stack exchange,提问作者Maria Varges

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:27:05