sql语句中的group by要怎么用!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句中的group by要怎么用!!相关的知识,希望对你有一定的参考价值。

1、定义
“Group
By”表达的意思就是按照“By”表明的规则对所有数据进行归类,所谓的归类就是将数据分成许多个“小区域”,对这些“小区域”里的数据进行处理。
2、原始表
3、简单Group
By
示例1
select
类别,
sum(数量)
as
数量之和
from
A
group
by
类别
返回结果如下表,实际上就是分类汇总。
4、Group
By

Order
By
示例2
select
类别,
sum(数量)
AS
数量之和
from
A
group
by
类别
order
by
sum(数量)
desc
返回结果如下表
在Access中不可以使用“order
by
数量之和
desc”,但在SQL
Server中则可以。
5、Group
By中Select指定的字段限制
示例3
select
类别,
sum(数量)
as
数量之和,
摘要
from
A
group
by
类别
order
by
类别
desc
示例3执行后会提示下错误,如下图。这就是需要注意的一点,在select指定的字段要么就要包含在Group
By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。
6、Group
By
All
示例4
select
类别,
摘要,
sum(数量)
as
数量之和
from
A
group
by
all
类别,
摘要
示例4中则可以指定“摘要”字段,其原因在于“多列分组”中包含了“摘要字段”,其执行结果如下表
“多列分组”实际上就是就是按照多列(类别+摘要)合并后的值进行分组,示例4中可以看到“a,
a2001,
13”为“a,
a2001,
11”和“a,
a2001,
2”两条记录的合并。
7、Having与Where的区别
where
子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
having
子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having
条件过滤出特定的组,也可以使用多个分组标准进行分组。
示例5
select
类别,
sum(数量)
as
数量之和
from
A
group
by
类别
having
sum(数量)
>
18
示例6:Having和Where的联合使用方法
select
类别,
SUM(数量)from
A
where
数量
gt;8
group
by
类别
having
SUM(数量)
gt;
10
8、Compute

Compute
By
select
*
from
A
where
数量
>
8
执行结果:
示例7:Compute
select
*
from
A
where
数量>8
compute
max(数量),min(数量),avg(数量)
执行结果如下:
compute子句能够观察“查询结果”的数据细节或统计各列数据(如例10中max、min和avg),返回结果由select列表和compute统计结果组成。
示例8:Compute
By
select
*
from
A
where
数量>8
order
by
类别
compute
max(数量),min(数量),avg(数量)
by
类别
执行结果如下:
示例8与示例7相比多了“order
by
类别”和“...
by
类别”,示例10的执行结果实际是按照分组(a、b、c)进行了显示,每组都是由改组数据列表和改组数统计结果组成.
参考技术A GROUP
BY
语句用于结合合计函数,根据一个或多个列对结果集进行分组。
还可以和having连用
参考:http://www.w3school.com.cn/sql/sql_groupby.asp
参考技术B group
by是一个聚合函数,是按什么分组的意思,你把要分组的字段写在group
by
的后面就可以了,后面用having
写分组条件
参考技术C group
by
属于聚合函数,查询时要将被查询的列聚合起来,例如:
C1
C2
C3
A
1
99
A
2
83
A
3
99
B
3
22
SELECT
C1,
SUM(C2)
FROM
T
GROUP
BY
C1;
参考技术D 用于对查询的结果按指定条件分组。

SQL里面group by 语句和WHERE的区别,高手进

我们老师写了一道题,统计平均分在75分以上的课程号和平均分
老师这样写的select C#,AVG(SCORE)
FROM student
group by c# having avg(score)>=75
老师讲GROUP BY是分组用的,题目中没写有“每”这个字,也就没说要分组啊,为什么老师用分组我很费解?为什么最后那句不用where avg(score)>=75呢?谁能告诉怎么看题目就能知道哪个用GROUP哪个用WHERE?谢谢,快考试了,高手快来帮忙啊!
我想知道为什么不用WHERE而用GROUP BY,怎么才能从题目中分辨出来这个就写GROUP BY那个就写WHERE?

你老师的写法是一个嵌套查询语句。
==================================
我晕……楼上哪里看出嵌套了……
好吧,楼主主要是两个问题,
一个是什么情况该用Group by,
还有一个是having 和where有什么区别。
那个题目可以这样读的吧:
统计“每”一门课程,显示平均分在75分以上的课程号和平均分。
如果不按每门课程统计,就变成对所有课程的分数求平均值了。显然和需求不符。
Group By 是集计分支,只要有统计数据的地方,就极可能用到Group by。
常用的集计函数有这几种:Count, Avg, Max, Min, Sum也就是说,如果要求某一数据的数量、平均值、最大值、最小值、总计,常常都是要和Group By连用的。
所以看见这种题目,就用Group by吧。
二,HAVING和WHERE的区别在于,HAVING是统计完以后进行过滤,而WHERE是在统计前进行过滤。
你的这个题目里,avg(score)是统计以后才得出的数据,所以只能用HAVING。
参考技术A 1.对where理解基本正确
2.having
子句对
group
by
子句设置条件的方式与
where
子句和
select
语句交互的方式类似。where
子句搜索条件在进行分组操作之前应用;而
having
搜索条件在进行分组操作之后应用。having
语法与
where
语法类似,但
having
可以包含聚合函数。having
子句可以引用选择列表中出现的任意项。
以上一段是我拷过来的,实际就是说,having
的效果,和where是差不多的。差别在于分组前可以where
但是group
by
分组后,显然不能再次where,所以要用having。
参考技术B 对于这段sql语句,我的理解是:
C#其实是课程号,那么GROUP BY进行分组的是课程号,而对于HAVING子句是对 GROUP BY 子句设置条件的方式,那么having avg(score)>=75也就是对于每个课程号选取其平均分大于75分的记录。。。
参考技术C Group By的名词解释是分组,但是并不是你理解的分组,如果不加Group By,这个查询会出错。

你老师的写法是一个嵌套查询语句。

以上是关于sql语句中的group by要怎么用!!的主要内容,如果未能解决你的问题,请参考以下文章

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

SQL里面group by 语句和WHERE的区别,高手进

sql中 group by排序

sql语句中的group by啥意思

sql语句中的group by啥意思

SQL中查询多个字段时,GROUP BY 要怎么使用?