关于SQL中WHERE后面能否跟聚合函数生成的字段名称!

我通过聚合函数sum生成一个新的字段:sum(score.绩点*course.学分)/sum(course.学分) as 平均绩点,在这里,“平均绩点”是新生成的字段,在表里面是没有的!

我想在WHERE约束语句中求“平均绩点”小于某一值的记录,比如说:平均绩点<2.2 可这个约束条件在ASP里面是执行不了的,出现以下错误:

错误类型:
Microsoft JET Database Engine (0x80040E10)
至少一个参数没有被指定值。

该如何解决呢?请高手明指!

不能直接使用新的字段名,可以在HAVING子句中以聚合函数作为条件。
如:
select sum(score.绩点*course.学分)/sum(course.学分) as 平均绩点,fieldn from tablename group by fieldn having
sum(score.绩点*course.学分)/sum(course.学分)>300

如果非要使用新字段名也可以,要把分组查询结果作为子查询。
如:
select * from
(
select sum(score.绩点*course.学分)/sum(course.学分) as 平均绩点,fieldn from tablename group by fieldn
) a
where 平均绩点>300
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-01-05
不能直接使用新的
字段名
,可以在HAVING子句中以
聚合函数
作为条件。
如:
select
sum(score.
绩点
*course.学分)/sum(course.学分)
as
平均绩点
,fieldn
from
tablename
group
by
fieldn
having
sum(score.绩点*course.学分)/sum(course.学分)>300
如果非要使用新字段名也可以,要把分组查询结果作为
子查询

如:
select
*
from
(
select
sum(score.绩点*course.学分)/sum(course.学分)
as
平均绩点,fieldn
from
tablename
group
by
fieldn
)
a
where
平均绩点>300
第2个回答  2009-04-09
select * from (select sum(score.绩点*course.学分)/sum(course.学分) as 平均绩点 from tablename) a where 平均绩点<2.2
相似回答