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 by | having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。 | |
使用group by 的目的就是要将数据分类汇总 | ||
在Sql中group by 是按字段分类 | 在Sql中也可以说order by是按字段排序 | |
where不能使用聚合函数,但是where和Group by可同时出现,先限制条件后分组 |
总结:
- 通常order by 和group by 没有太多的关系,但是它们常常组合在一起用,完成分组+排序的功能。
- group by 比order by先执行,order by不会对group by 内部进行排序,如果group by后只有一条记录,那么order by 将无效。要查出group by中最大的或最小的某一字段使用 max或min函数
- 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的时候,执行顺序和编写顺序是: