Oracle group by用法介绍
2016-09-24 17:36
274 查看
group by是分组函数。一般都是配合聚合函数使用的。介绍几个重要的知识点。
A B
1 abc
1 bcd
1 asdfg
select A,B from table group by A
你说这样查出来是什么结果,
A B
abc
1 bcd
asdfg
右边3条如何变成一条,所以需要用到聚合函数,比如
select A,count(B) 数量 from table group by A
这样的结果就是
A 数量
1 3
所以我们用到的分组函数的前提就是你想根据这分组计算什么,比如计算这组总的人数,平均数,最小数,最大数。
但是不是说group by分组条件的字段都必须在查询条件中列出来。出现在group by中的字段可以不select出来,也就是说 select中的字段必须出现在group by中 group by中的分组条件不一定出现在select中。
看到select A,count(B) 数量 from table group by A 这个语句我们表面印象应该是先计算count(B),再group,这牵扯到oracle语句执行机制,在这不多讲了(其实也不会)。我们要理解是,或者说记住的是group by执行顺序。这边oracle是先按照group by分组条件先进行分组,再进行count计算的。
select–from–where–group by–having–order by
其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序 与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行
from–where–group by–having–select–order by,
from:需要从哪个数据表检索数据
where:过滤表中数据的条件
group by:如何将上面过滤出的数据分组
having:对上面已经分组的数据进行过滤的条件
select:查看结果集中的哪个列,或列的计算结果
order by :按照什么样的顺序来查看返回的数据
可以看出select语句是先group by再进行select的,所以group by在count先计算。
1.基于Where Rating>1 筛选出符合条件的行;
2.基于group by CategoryName 对筛选的结果进行分组;
3.为每个CategoryName组计算Count(*)
4. 基于having CategoryName like ‘A%’留下符合条件的组
5. 根据order by 的条件对剩下的行组进行排序,SQL中的count(*)也是分组函数
在介绍几个小的知识点
group by 的顺序类似order by
如 group by A,B,C,D责先按A分组 再按BCD这个顺序分组
group by条件越多分组越细 也就是说 假如A是学校 B是学院 C是专业 D是班级 那最后group by的结果是按照有多少个不同的班级分组 按照最细致的分组
from后面的表关联,是自右向左解析的
而where条件的解析顺序是自下而上的。
也就是说,在写SQL文的时候,尽量把数据量大的表放在最右边来进行关联,
而把能筛选出大量数据的条件放在where语句的最下面。
参考:http://blog.csdn.net/m53931422/article/details/41548147
http://www.2cto.com/database/201304/204965.html
select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面
group by是分组函数,所以查询的数据都是基于这分组来说的。看例子:A B
1 abc
1 bcd
1 asdfg
select A,B from table group by A
你说这样查出来是什么结果,
A B
abc
1 bcd
asdfg
右边3条如何变成一条,所以需要用到聚合函数,比如
select A,count(B) 数量 from table group by A
这样的结果就是
A 数量
1 3
所以我们用到的分组函数的前提就是你想根据这分组计算什么,比如计算这组总的人数,平均数,最小数,最大数。
但是不是说group by分组条件的字段都必须在查询条件中列出来。出现在group by中的字段可以不select出来,也就是说 select中的字段必须出现在group by中 group by中的分组条件不一定出现在select中。
看到select A,count(B) 数量 from table group by A 这个语句我们表面印象应该是先计算count(B),再group,这牵扯到oracle语句执行机制,在这不多讲了(其实也不会)。我们要理解是,或者说记住的是group by执行顺序。这边oracle是先按照group by分组条件先进行分组,再进行count计算的。
where, group by, having, order by语句的执行顺序
查询中用到的关键词主要包含六个,并且他们的顺序依次为select–from–where–group by–having–order by
其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序 与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行
from–where–group by–having–select–order by,
from:需要从哪个数据表检索数据
where:过滤表中数据的条件
group by:如何将上面过滤出的数据分组
having:对上面已经分组的数据进行过滤的条件
select:查看结果集中的哪个列,或列的计算结果
order by :按照什么样的顺序来查看返回的数据
可以看出select语句是先group by再进行select的,所以group by在count先计算。
select CategoryName, count(*), AVG(Rating) from BOOKSHELF where Rating>1 group by CategoryName having CategoryName like 'A%' order by count(*) desc
1.基于Where Rating>1 筛选出符合条件的行;
2.基于group by CategoryName 对筛选的结果进行分组;
3.为每个CategoryName组计算Count(*)
4. 基于having CategoryName like ‘A%’留下符合条件的组
5. 根据order by 的条件对剩下的行组进行排序,SQL中的count(*)也是分组函数
在介绍几个小的知识点
group by 的顺序类似order by
如 group by A,B,C,D责先按A分组 再按BCD这个顺序分组
group by条件越多分组越细 也就是说 假如A是学校 B是学院 C是专业 D是班级 那最后group by的结果是按照有多少个不同的班级分组 按照最细致的分组
from后面的表关联,是自右向左解析的
而where条件的解析顺序是自下而上的。
也就是说,在写SQL文的时候,尽量把数据量大的表放在最右边来进行关联,
而把能筛选出大量数据的条件放在where语句的最下面。
参考:http://blog.csdn.net/m53931422/article/details/41548147
http://www.2cto.com/database/201304/204965.html
相关文章推荐
- 经典QQ自我介绍、个性签名
- XML-RPC Web服务协议介绍[一]
- WinCE下Touch Panel驱动介绍
- Http Handler 介绍
- Mercury主流测试工具介绍(转载)
- 介绍Android应用工程文件组成
- 第一代Snapdragon介绍
- Android平台介绍
- JavaScript初学者应注意的七个细节详细介绍
- Oracle DECODE函数语法使用介绍
- ffmpeg结构体以及函数介绍(三)
- Redis 介绍与安装部署
- linux 常用基本命令之 pwd cd ls mkdir du 的介绍与使用
- ANDROID框架结构和介绍
- Css样式兼容IE6,IE7,FIREFOX的浏览器的写法示例介绍
- IOS中@property的属性weak、nonatomic、strong、readonly等介绍
- parted分区介绍
- Linux性能监控工具sysstat系列:介绍与安装
- MooseFS 分布式文件介绍+部署 MFS
- hibernate.hbm2ddl.auto 配置项介绍