选择列表中的列'sc.cno'无效,因为该列没有包含在聚合函数或者group by 字句中《SQL中的group by该怎么用?》

1.SQL Server中,子查询不能返回多个值
2.子查询中不能包含ORDER BY子句
3.group by 可以将查询结果按某一列或多列的值进行分组。group by 一般是和聚合函数一起搭配使用的,不然用了也没什么意义,除了消除重复功能外,但消除重复一般使用distinct。

当我执行以下语句:select sno,cno from sc group by sno 报错如下
在这里插入图片描述
因为,我的select字段中有cno课程号,但却不是在聚合函数或者group by子句
中,所以报错。
正确写法:
//这一句是查看,每个人修读了几门课
select sno,count(cno) from sc group by sno
//这里先按学号分组再按课程号分组,只按学号分组不会出现重复的学号的
select sno,cno from sc group by SNo,CNo
2) 如果是筛选结果 可以先使用where指定条件 再用group by 或者先用group
by 再用having来指定条件,(聚合函数不能出现在where子句中,只可以和select或having搭配,SQL Server会报错)
//查询选修两个门课及以上的学生
//报错
select SNo from sc group by SNo where count()>1
//正解
select SNo from sc group by SNo having count(
)>1
//查看每个学生选了几门课,且选的课的成绩不为空

//报错,group by要在where后面
select sno,count(cno) from sc group by SNo where score is not null
//正解
select sno,count(cno) from sc where score is not null group by SNo
通过这次实验,我对查询语句有了更深入的理解,以前自己没注意到的语法细节也在实验中体现了出来,感谢老师在实验过程中也对我给到很多的建议和帮助,不管怎么说,最终还是得勤加练习并不断总结才能对sql语句运用的更加熟练。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章