社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
最近学习SQL Server遇到了分组的问题,发现SQL Server中的分组和MYSQL中的分组有不一样的地方,借此仔细的翻阅资料深入的学习了下。
就以案例来说明下:
学生成绩表(学好#,课程号,成绩)
我们开始按学号分组:
select sNo from sc group by sNo
结果为:
学生成绩以学号为小组的形式开始划分,相同的学号成绩归并成一组,以此我们可以看到,Group By可以将查询结果按某一列或多列的值进行划分
易错点分析:
在SQL Server中,出现在select后面的字段,如果选用分组的形式,要么出现在聚合函数中,要么出现分组函数中。
因为,select之后的字段有cNo课程号,但却不是在聚合函数或Group By子句中,所以会出现报错情况。
正确用法:
//这一句是查看,每个人修读了几门课
select sno,count(cno) from sc group by sno
//这里先按学号分组再按课程号分组,只按学号分组不会出现重复的学号的
select sno,cno from sc group by SNo,CNo
如果是筛选结果,可以选择where后面指定筛选条件,再用Group By进行分组或者用Group By进行分组,再用Having进行指定条件,值得注意的是Where后面不能有聚合函数作为指定条件
//查询选修两个门课及以上的学生
//报错
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
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!