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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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语句 ORDER BY HAVING GROUP BY WHERE 等区别

本文参考链接:https://blog.csdn.net/sinat_40692412/article/details/81200133

group by 分组   ,配合聚合函数使用 sum() count()  avg()等等

having  对分组后的结果进行筛选

ORDER BY 最后对结果进行排序

WHERE 一开始对表数据做筛选

FROM 组装不同的数据源

一、

group by字句可以和where条件语句结合在一起使用,当结合在一起时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组,然后再使用having字句对分组后的结果进行筛选。

 

二、需要注意having和where的用法区别:

1、having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)

2、where肯定是在group by之前

3、where后的条件表达式里不允许使用聚合函数,而having可以

 

三、当一个查询语句同时出现where,group by ,having,order by的时候执行顺序和编写顺序是

1、执行where xx 对全表数据做筛选,返回第一个结果集

2、针对第一个结果集使用group by分组,返回第二个结果集

3、针对第二个结果集中的每一组数据执行select xx,有几组就执行几次,返回第三个结果集

4、针对第三个结果集执行having xx进行筛选,返回第四个结果集

5、针对第四个结果集进行排序ORDER BY

 

以上是关于SQL里面group by 语句和WHERE的区别,高手进的主要内容,如果未能解决你的问题,请参考以下文章

sql语句有关where,group by,having的问题

SQL语句 ORDER BY HAVING GROUP BY WHERE 等区别

SQL语句 ORDER BY HAVING GROUP BY WHERE 等区别

为啥在SQL语句的GROUP BY里面不可以使用别名

SQL语句之order by group byhavingwhere

SQL语句中,如果有group by 和order by两个语句,是先分组还是先排序?