group by 和 order by的区别即使用

group by 和 order by的区别即使用

1.概念
顾名思义,group by 是 分组;order by是排序。
group by 必须和聚合函数配合使用,聚合函数是指:sum()、max()、count()、avg()等。在group by 后面可以跟上having进行过滤,对结果进行筛选。
order by是排序,默认为升序(asc), 后面跟排序的字段名,可以跟多个字段名。

2.使用

2.1.group by

people数据库表:
在这里插入图片描述

语句的测试:

select age from people group by age

这里根据年龄分组查询,查询结果是只输出age不同的元素列,不重复。
在这里插入图片描述
之前说过,group by 要配合聚合函数来使用才有意义。
我们试一下查平均年龄。

select name,avg(age) from people group by name

在这里插入图片描述
那么我group by之后还要筛选一下avg(age) >16的name呢?

select name,avg(age) from people group by name having avg(age) > 16

在这里插入图片描述
这里就要用到having进行过滤筛选了。

3.其他 扩展问题。

group by不能跟where一起用吗?

可以。注意:where肯定在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可以。

接下来我们看看order by,即排序,这个很简单,后面跟上排序的字段即可,默认是升序。

1.查出来的平均年龄按照升序排列。

select name,avg(age) from people group by name order by avg(age)

或者

select name,avg(age) from people group by name order by avg(age) asc

在这里插入图片描述
2.查出来的平均年龄按照降序排列。

select name,avg(age) from people group by name order by avg(age) desc

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值