回 帖 发 新 帖 刷新版面

主题:有关SQL Server 2000中group by的用法

这几天用2000的个人版写了这么一个查询语句
                      select S.sname,avg(score)
                      from S,SC
                      where S.sno=SC.sno
                      group by SC.sno
                      having avg(score)>=60
S是学生关系(sno是学号)
SC是学生的选课关系
执行时系统提示说列 'S.sname'(就是学生的名字啦) 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中
而把group by 后的SC.sno改为S.sname就成功了
为什么?是不是2000的group by 后的属性一定要在select中出现?望高手指教!不胜感谢!

回复列表 (共5个回复)

沙发

是不是2000的group by 后的属性一定要在select中出现?
====
是的

板凳

确实如此!

如果使用group by 来分组, 则在select 项的列表里的所有引用列,分组函数(AVG, MAX, MIN, COUNT)的参数里的除外, 必须出现在group by 后面.

如:

select C1, C2, AVG(C3)
from   t
group by C1, C2

3 楼

SC.sno也要在select中才可以

4 楼

你select后面的属性列只要是没有使用聚合函数的都必须出现在group by后面
而group by后的也必须是select后面的

5 楼

看来这个问题大家都懂-*-

我来回复

您尚未登录,请登录后再回复。点此登录或注册