Oracle中有关Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)

时间:2021-01-15 22:53:29

Oracle中有关Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)

OracleSQL 

表 tabzx:

Sql代码  Oracle中有关Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)
  1. select * from tabzx  

 

表数据:


Oracle中有关Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)

查询语句:

1:

Sql代码  Oracle中有关Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)
  1. select count(*),avg(tabzx.salary),sum(tabzx.salary),max(tabzx.salary),min(tabzx.salary)from tabzx  

 结果:

 
Oracle中有关Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)
 

分析:

此时Oracle将表tabzx作为一个单独的组(group)进行函数处理的;

 

Assumption:

SQL表达式编写为:

Sql代码  Oracle中有关Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)
  1. select tabzx.dept_id, count(*),avg(tabzx.salary),sum(tabzx.salary),max(tabzx.salary),min(tabzx.salary)from tabzx  

 结果:


Oracle中有关Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)
 

总结:

Oracle中,avg();sum();min();max();的返回是都是一条数据,针对同一张表,同样的查询条件,使用可以在同一张表中显示;修改后出错,因为SQL中的条件整张表,所以不能显示任何原来表中的字段。弹出以上提示....

 

2:

Sql代码  Oracle中有关Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)
  1. select tabzx.dept_name,count(*),avg(tabzx.salary),sum(tabzx.salary),max(tabzx.salary),min(tabzx.salary)from tabzx group by tabzx.dept_name  

 结果:


Oracle中有关Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)
 

分析:

第一个SQL特殊的group by,此处的SQL就算相对特殊的group by tabzx.dept_name,此处可以增加一字段tabzx.dept_name。

 

Assumption:

Sql代码  Oracle中有关Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)
  1. select tabzx.dept_name,tabzx.dept_id,count(*),avg(tabzx.salary),sum(tabzx.salary),max(tabzx.salary),min(tabzx.salary)from tabzx group by tabzx.dept_name  

 结果:


Oracle中有关Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)
 

总结:

Oracle中,avg();sum();min();max();的返回是都是一条数据,针对同一张表,同样的查询条件,使用可以在同一张表中显示;修改后出错,因为SQL中的条件group by tabzx.dept_name,所以不能显示其它表中的字段。弹出以上提示....

值得注意的是:这里的avg();sum();min();max()的字段都可以任性选择。统计出来的结果,是分组后的统计...

 

3:

Sql代码  Oracle中有关Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)
  1. select avg(tabzx.dept_id),sum(tabzx.dept_id) ,avg(tabzx.salary),sum(tabzx.salary),max(tabzx.salary)from tabzx group by tabzx.dept_name  

 

结果:


Oracle中有关Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)
 

4:

Sql代码  Oracle中有关Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)
  1. select tabzx.dept_name,tabzx.job_cat,tabzx.em1_id,avg(tabzx.salary),max(tabzx.salary) from tabzx group by tabzx.dept_name,tabzx.job_cat,tabzx.em1_id having avg(tabzx.salary)>1000;  

 

结果:


Oracle中有关Group by 中avg();sum();min();max();count();的运用整理(Oracle的执行顺序)

总结: 

group by _1_ , _2_ , _3_ 中,avg();sum();min();max();count();数据是按照_3_ 分组统计的....也就是说最后一个....

 

原创转载请注明,谢谢...

 

-----------------------------------------------------------------------------------------------------------------------------

 

1.select 列 from 表列表名/视图列表名 where 条件.
2.select 列 from 表列表名/视图列表名 where 条件 group by (列列表) having 条件
3.select 列 from 表列表名/视图列表名 where 条件 group by (列列表) having 条件 order by 列列表
4.select 列 from 表1 join 表2 on 表1.列1=表2.列1...join 表n  on 表n.列1=表(n-1).列1 where 表1.条件 and 表2.条件...表n.条件
执行顺序:

1. 先where 后select
2. 先where 再group 再having 后select
3. 先where 再group 再having 再select 后order
4. 先join  再where 后select