假设有如下表:
学生(学号,姓名,性别,年龄,系)
课程(科称号,课程名称)
选课(学号,课程号,成绩)
要求:
将选课在5门以上(包括5门)的学生的学号,姓名,平均分和选课门数按平均分降序排序,并将结果存于数据库表stu_temp(字段名为学号,姓名,平均分和选课门数)
第一种做法:
select a.学号,a.姓名,avg(b.成绩) as 平均分,count(b.课程号) as 选课门数
from 学生 as a,选课 as b
where a.学号=b.学号
group by b.学号
having(选课门数)>=5
order by 平均分 desc
into dbf stu_temp
此方法系统提示sql缺失GROUP BY语句或GROUP BY 语句无效
第二种做法:
select a.学号,a.姓名,avg(b.成绩) as 平均分,count(b.课程号) as 选课门数
from 学生 as a,选课 as b
where a.学号=b.学号
group by b.学号,a.姓名
having(选课门数)>=5
order by 平均分 desc
into dbf stu_temp
此方法OK。
问题是:第二种做法中为什么加入了a.姓名就可以?
因為select語句裡麵有avg和count的聚閤函數,而唯獨a.学号和a.姓名這兩個字段是沒有經過聚閤處理的!!!所以那些沒有經過聚閤處理的字段就必須一定要出現在group by子句後面才行,否則編譯會出錯,這就是為什么第二種方法加入了a.姓名就可以了!