博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL学习之分组数据Group by
阅读量:6146 次
发布时间:2019-06-21

本文共 1590 字,大约阅读时间需要 5 分钟。

简介:"Group By"根据字面上的意思理解,就是根据"By"后面指定的规则对数据进行分组(分组就是将一个数据集按照"By"指定的规则分成若干个子数据集),然后再对子数据集进行数据处理。

1、下面通过一个实例来了解"Group By"的作用和功能,代码如下:

select * from course

这是一个课程明细表,现在有一个报表程序,需要每个老师的编号,以及每位老师所教的课程总数,下面是解决代码:

select tno,COUNT(cname) as courses from course group by tno

这就是个人的理解,上图是通过Group By分组之后的第一组,后面的数据集合包含教师ID为t001的所有行数数据,这个数据集合我们可以使用聚集函数来获取我们想要的信息,但是无法获取其中的详细的列信息!原因我们可以通过上图的结构可以看出!

ok,通过group by 完成需求!

上面的Select指定了两个列,tno包含教师的编号,courses 为计算字段(用Count()函数建立),group by子句指示DBMS按tno排序并分组数据。这就会对每个tno而不是整个表计算courses一次(也就是说DBMS会对(按照tno排序并分组之后的单个数据子集)进行Count()运算,而不是真个数据集)。

 

2、下面是使用Group By子句需要知道的一些重要的规定

(1)Group By子句可以包含任意数目的列,因而可以对分组进行嵌套,进行更细致的分组。

(2)Group By子句中列出的每一列都必须是检索列(或者有效的表达式,注意不能是聚集函数)。如果在SELECT中使用了检索列(或者表达式),则在Group By子句中使用相同的表达式,不能使用别名。

(3)大多数SQL不允许Group By带有可变长度的数据类型(如文本,text类型)。

(4)除聚集计算语句外,SELECT语句中的每一列都必须在Group By中给出。

(5)如果分组列中包含具有Null值的行,则Null将作为一个分组返回,如果列中有多行Null,他们将作为一个分组返回。

(6)Group By必须出现在Where子句之后,Order By子句之前。

(7)如果在Group By子句中嵌套了分组,数据将在最后指定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(不能从个别的列中取回数据)。

 

3、Group By All+多个字段,Group By+多个字段

在SQL Server 中Group By All+多个字段和Group By+多个字段在效果是一样的,都是通过多个字段来分组!如下代码:

select * from course

这是一个课程明细表,现在有个报表程序需要展示每个老师教授的课程(相同的课程)一共教多少个班级,下面是解决代码:

select tno,cname,COUNT(cname) from course group by all tno,cname order by tno

这是个人的理解,上图是通过Group By分组之后的第一组,后面的数据集合包含(教师ID为t001并且课程名称为Oracle)的所有行数数据,这个数据集合我们可以使用聚集函数来获取我们想要的信息,但是无法获取其中的详细的列信息!原因我们可以通过上图的结构可以看出!

ok,解决需求,通过上面的结果图,我们可以看出,三个老师所教的课程基本都只教一个班,除了t003老师的sql SERVER 2005教了两个班,当然我们实际的业务中,并不会这样建表,我这边指示为了演示Group By+多个字段能完成的功能,才强行构建这个需求!

转载于:https://www.cnblogs.com/GreenLeaves/p/5816364.html

你可能感兴趣的文章
Tar打包、压缩与解压缩到指定目录的方法
查看>>
配置spring上下文
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
Oracle中drop user和drop user cascade的区别
查看>>
登记申请汇总
查看>>
Office WORD如何取消开始工作右侧栏
查看>>
Android Jni调用浅述
查看>>
CodeCombat森林关卡Python代码
查看>>
第一个应用程序HelloWorld
查看>>
(二)Spring Boot 起步入门(翻译自Spring Boot官方教程文档)1.5.9.RELEASE
查看>>
Java并发编程73道面试题及答案
查看>>
企业级负载平衡简介(转)
查看>>
ICCV2017 论文浏览记录
查看>>
科技巨头的交通争夺战
查看>>
当中兴安卓手机遇上农行音频通用K宝 -- 卡在“正在通讯”,一直加载中
查看>>
Shell基础之-正则表达式
查看>>
JavaScript异步之Generator、async、await
查看>>
讲讲吸顶效果与react-sticky
查看>>
c++面向对象的一些问题1 0
查看>>
直播视频流技术名词
查看>>