SQL Server和MYSQL中Group By的用法与易错点 - Go语言中文社区

SQL Server和MYSQL中Group By的用法与易错点


最近学习SQL Server遇到了分组的问题,发现SQL Server中的分组和MYSQL中的分组有不一样的地方,借此仔细的翻阅资料深入的学习了下。

就以案例来说明下:

学生成绩表(学好#,课程号,成绩)

在这里插入图片描述
我们开始按学号分组:

select sNo from sc group by sNo

结果为:
在这里插入图片描述
学生成绩以学号为小组的形式开始划分,相同的学号成绩归并成一组,以此我们可以看到,Group By可以将查询结果按某一列或多列的值进行划分

易错点分析:

在SQL Server中,出现在select后面的字段,如果选用分组的形式,要么出现在聚合函数中,要么出现分组函数中。
例如:执行如下语句

      select sNo,cNo from sc group by sNo

会出现报错:(MYSQL则不会出现此情况,因为MYSQL执行的不严谨)

在这里插入图片描述
因为,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
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/as6950426a/article/details/90204845
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-29 14:50:12
  • 阅读 ( 1399 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢