数据库的group 和group by 的用法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库的group 和group by 的用法?相关的知识,希望对你有一定的参考价值。

最近学了数据库的group 和group by ,但是对他们的用法比较模糊,所以想来了解下他们的具体用法和怎么用,希望越详细越好,谢谢!

Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。

它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。注意:group by 是先排序后分组。

举例子说明:如果要用到group by 一般用到的就是“每这个字” 例如说明现在有一个这样的表:每个部门有多少人,就要用到分组的技术

selectDepartmentIDas“部门名称”。

COUNT(*) as“个数” from BasicDepartment group by DepartmentID

这个就是使用了group by +字段进行了分组,其中我们就可以理解为我们按照了部门的名称ID

DepartmentID将数据集进行了分组;然后再进行各个组的统计数据分别有多少;

如果不用count(*)而用类似下面的语法

selectDepartmentID,DepartmentNamefromBasicDepartmentgroupbyDepartmentID

将会出现错误

消息8120,级别16,状态1,第1行

选择列表中的列“BasicDepartment。DepartmentName”无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

扩展资料

结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式。

所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。

参考技术A 这个问题...我们分开来说
首先我们从字面上的意思理解,group是 <组,聚合> 的意思,by是 <通过,由> 的意思,
group by就是 通过你所指定的列 进行分组,聚合, 比方说一个学校,由1 2 3三个班级,
每个班由不同的成员,但是他们的共同特性就是每个班里的每个人都属于1 2 3这其中的一个班级,
假设你要查某个班里所有成员的某个成绩总和,或平均分,你用select 分数,班级号 from 班级表 where 班级号,所得出来的只能是每个人的分数,不能返回一个你想要的值;
这个时候我们就需要用到group by了,首先我们先通过group by对你所要查询的资料集分组,
例如group by 班级号 这样你所查询的资料,就由原来所有的数据分组变成了3个,1 2 3;
然后假设你要得到某个班级里的某个成绩的总分,可以配合聚合函数使用,不知道你学到了聚合函数没有,
例如select sum(某科分数列),班级号 from 班级资料 where 你想知道的班级 group by 班级号,那么得出的就是你所需要的某个班某个科目的成绩总和

当然聚合函数不止sum(),还有avg()等等的

group by下还有很多子句,比如having,having你可以先理解成何where一样是查询的条件,但是它必须和group by同时使用,因为having是对group by分组后的数据进行筛选,可以和where联合起来使用,where group by having之间的关系是,先通过where筛选出数据,group by对得出的数据进行分组,having再对分组后的每一行进行筛选

举个例子,你要查及格人数超过10人的班级
select 班级号 from 表
where 成绩>=60
group by 班级号
having count(成绩) > 10

group by的一下注意事项,例如having必须和group by一起使用,还有你所查询的列必须是聚合函数或者你用于做分组条件的列等等

以上的回答仅仅是针对你所提出的问题做的回答,如果还有疑问可以继续补充问题,我会关注

oracle中group by用法

参考技术A 1,在select 语句中可以使用group by 子句将行划分成较小的组,一旦使用分组后select操作的对象变为各个分组后的数据,使用聚组函数返回的是每一个组的汇总信息。
使用having子句限制返回的结果集。group by 子句可以将查询结果分组,并返回行的汇总信息Oracle 按照group by 子句中指定的表达式的值分组查询结果。

2,在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚组函数 select max(sal),job emp group by job; (注意max(sal),job的job并非一定要出现,但有意义) 查询语句的select 和group by ,having 子句是聚组函数唯一出现的地方,在where 子句中不能使用聚组函数。 select deptno,sum(sal) from emp where sal>1200 group by deptno having sum(sal)>8500 order by deptno;

3,当在gropu by 子句中使用having 子句时,查询结果中只返回满足having条件的组。在一个sql语句中可以有where子句和having子句。having 与where 子句类似,均用于设置限定条件 where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚合函数,使用where条件显示特定的行。
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚合函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

4,使用order by排序时order by子句置于group by 之后 并且 order by 子句的排序标准不能出现在select查询之外的列。
查询每个部门的每种职位的雇员数
select deptno,job,count(*) from emp group by deptno,job

5,记住这就行了:
在使用group by 时,有一个规则需要遵守,即出现在select列表中的字段,如果没有在组函数中,那么必须出现在group by 子句中。(select中的字段不可以单独出现,必须出现在group语句中或者在组函数中。)

以上是关于数据库的group 和group by 的用法?的主要内容,如果未能解决你的问题,请参考以下文章

sql中得group by 用法?

group by用法

group by having用法举例

SQL中的group by语句和order by语句怎么用?最好能有个例子

having和group by的区别?

sql group by用法