sql语句中的group by什么意思

sql语句中的group by什么意思,第1张

一、sql语句中的groupby是:GROUP

BY

语句用于结合合计函数,根据一个或多个列对结果集进行分组。

二、sql语句group

by的高级语法:

1、写上一个创建表的

sql语句

当然,我们也可以用设计图创建;

2、select

from

student,我们输入一条查询语句,显示出我们刚刚插入的所有数据;

3、select

stuname,COUNT()

from

student

group

by

stuname。从上面的结果我们不难看出,我们根据学生姓名进行了分组,另一种说法其实就是把重复的过滤了,把学生表中的姓名那一列用group

by分组,并且利用聚合函数(count) 统计每个姓名出现的次数。

Sql语句中有很多技巧,一般除了我们初学时的增删改查,还有其他很多。安装的时候也一定要记得看一下自己的 *** 作系统是多少位你是32位 *** 作系统的就安装32位的Sqlserver

版本不限制,2005、2012都可以。

错误写法:

- group by a,b :先按照 a 分组,如果 a 相同,再按照 b 分组。

错误写法

group by分组后,select 中只能出现分组后的整体信息,不能出现组内详细信息

楼主你好,

首先你要明白group by 是分组查询的意思

使用group by 关键字时,在select列表中可以指定的项目是有限制的,

select语句中仅允许以下几项,

1:被分组的列

2:为每个分组返回一个值的表达式,

例如用一个列明作为参数的聚合函数小僧再介绍一下几个常用的聚合函数

1:sum 求和

2:avg 求平均值

3:max / min 求最大值 / 最小值

4:count 表达式中非空值的出现次数

楼主你是想查什么呢?

我打2个比方吧查询男同学和女同学的分数总和

select sum(成绩) as 成绩总和,性别

from cj

group by 性别

结果样式:

成绩总和 性别

XXX 男

XXX 女

如果是多表连接的话,那就是连接后的表,然后再分组。。。

group by 的是在分组后面 *** 作的语句

查询男同学和女同学的平均分

select avg(成绩) as 平均分,性别

from cj

group by 性别

结果样式:

平均分 性别

XXX 男

XXX 女

表示根据后面的字段来分组,如果只有1个字段,那只是根据这个字段的值来进行一次分组就可以了;若后面有多个字段,那表示根据多字段的值来进行层次分组,分组层次从左到右,即先按第1个字段分组,然后在第1个字段值相同的记录中,再根据第2个字段的值进行分组;接着第2个字段值相同的记录中,再根据第3个字段的值进行分组依次类推。

概述

今天主要分享下Oracle数据库分组函数group by 、 rollup、cude、grouping 、grouping sets的常用用法,以下以Oracle自带schema做演示。

1、group by的使用

--根据DEPTNO和JOB进行分组。求相同DEPTNO,相同JOB的员工工资总和。

SELECT EDEPTNO,EJOB,SUM(ESAL) FROM EMP E GROUP BY EDEPTNO,EJOB ORDER BY EDEPTNO;

2、group by 配合rollup的使用

rollup()--可以使用一个或者多个参数。意思是从右向左进行数据的汇总统计,并生成一行,rollup是个统计函数。

以下是根据分组情况进行统计,最终进行全部汇总。

(1)简单的使用rollup--生成一行新数据。(要生成新的一行数据,还可以使用UNION ALL)

SELECT DDUMMY FROM DUAL D GROUP BY ROLLUP(DDUMMY);

(2)先根据EDEPTNO,EJOB进行分组,然后从右向左

SELECT EDEPTNO,EJOB,SUM(ESAL) FROM EMP E GROUP BY ROLLUP(EDEPTNO,EJOB) ORDER BY EDEPTNO;

针对以上的使用ROLLUP的结果的理解:

a:首先根据GROUP BY EDEPTNO,EJOB查询出9条数据(除4,8,12,13外),在根据rollup的定义,从右向左,对ROLLUP中的参数进行小计

首先根据JOB(对所有的JOB进行汇总),汇总出4,8,12行,在根据EDEPTNO(对所有的DEPTNO进行汇总),汇总出第十三行数据。

(3) 特殊情况

SELECT EDEPTNO,EJOB,SUM(ESAL) FROM EMP E GROUP BY ROLLUP(EJOB,EDEPTNO) ORDER BY EDEPTNO;

理解:首先根据GROUP BY EDEPTNO,EJOB查询出前九条数据,其次对EDEPTNO进行汇总,但是必须考虑JOB,也就是相同的JOB,的所有的工资总和,所以出现下面五条数据。

3、group by 配合cube的使用

SELECT EDEPTNO,EJOB,SUM(ESAL) FROM EMP E GROUP BY CUBE(EDEPTNO,EJOB) ORDER BY EDEPTNO;

理解:CUBE会对条件中的每一个条件进行单独的汇总:即对单独的列进行汇总

GROUP BY CUBE(EDEPTNO,EJOB)首先根据:GROUP BY EDEPTNO,EJOB查询数据,其次对EJOB进行汇总(不考虑DEPTNO,单独汇总,而ROLLUP是在同一个DEPTNO下面)再对EDEPTNO进行汇总,最后全部汇总。

cube(a,b) 统计列包含:(a,b)、(a)、(b)、()

cube(a,b,c) 统计列包含:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、(c)、()

4、GROUPING 的使用

GROUPING函数可以接受一列,返回0或者1。如果列值为空,那么GROUPING()返回1;如果列值非空,那么返回0。GROUPING只能在使用ROLLUP或CUBE的查询中使用。当需要在返回空值的地方显示某个值时,GROUPING()就非常有用。

SELECT GROUPING(EDEPTNO), EDEPTNO,EJOB,SUM(ESAL) FROM EMP E GROUP BY ROLLUP(EDEPTNO,EJOB) ORDER BY EDEPTNO;

可以使用decode或者case函数进行转换这种不友好的显示:

SELECT

CASE WHEN grouping(EDEPTNO) = 1

THEN '总计'

ELSE EDEPTNO || ''

END AS 部门,

CASE WHEN grouping(EJOB) = 1 AND grouping(EDEPTNO) = 0

THEN '小计'

ELSE EJOB

END AS 工作种类,

SUM(ESAL) FROM EMP E GROUP BY ROLLUP(EDEPTNO,EJOB)

ORDER BY EDEPTNO;

SELECT DECODE(GROUPING(EDEPTNO), 1, '总计', EDEPTNO) AS 部门,

CASE

WHEN GROUPING(EJOB) = 1 AND GROUPING(EDEPTNO) = 0 THEN

'小计'

ELSE

EJOB

END AS 工作种类,

SUM(ESAL)

FROM EMP E

GROUP BY ROLLUP(EDEPTNO, EJOB)

ORDER BY EDEPTNO;

5、grouping sets提供了指定汇总集合条件的功能

根据EDEPTNO,EJOB分别汇总数据。

SELECT EDEPTNO,EJOB,SUM(ESAL) FROM EMP E GROUP BY GROUPING SETS(EDEPTNO,EJOB);

觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

以上就是关于sql语句中的group by什么意思全部的内容,包括:sql语句中的group by什么意思、sql 分组 group by、在SQL中分组查询 Group by 的存在条件是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9402853.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存