Order by      having     group by 区别

综合网上各种理解再总结:可能有重复表述的

查询中的子句

平时数据库用到最多的就是select语句:select…from…,一条把没有过滤的数据无脑摆在你眼前语句。
这里就不聊它了,主要说一下两个有
过滤能力的查询子句Group by…having…和Order by…

group by(分组)

having (过滤)

order by(排序)

group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。

注意:聚合函数是---sum()、count()、avg()、min()、max()等都是“聚合函数”

 

Having跟where的功能差不多,只不过他是在分完组之后,再对分组数据进行过滤。

having只能用在group by之后

order by 从英文里理解就是行的排序方式,默认的为升序。降序DESC

order by 后面必须列出排序的字段名,还可以采用多个字段排序,需要用”,”把字段隔开,如果根据第一个字段排序重复了,会根据第二个字段排序。

在sql命令格式使用的先后顺序上,group by 先于 order byhaving 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。    
使用group by 的目的就是要将数据分类汇总  
在Sql中group by 是按字段分类 在Sql中也可以说order by是按字段排序
where不能使用聚合函数,但是where和Group by可同时出现,先限制条件后分组  

总结:

  1. 通常order by 和group by 没有太多的关系,但是它们常常组合在一起用,完成分组+排序的功能。
  2. group by 比order by先执行,order by不会对group by 内部进行排序,如果group by后只有一条记录,那么order by 将无效。要查出group by中最大的或最小的某一字段使用 max或min函数
  3. order by 是排序 group by是分组(聚合)

 

 

其他 扩展问题

 

一,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的时候,执行顺序和编写顺序是:

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐