Oracle 查询分组group by

分组函数用法:

  group by 列;

  select type  from hello group by type;

先来一张基础表:


 


 问题1:比如我想查询数据中有多少个家庭地址。可以利用分组函数 group by 列;

select type 家庭地址 from hello group by type;

    


 分组函数会把重复的数据过滤掉,然后查询出来。

问题2:查询同一个家庭地址有两个人的数据;

select type 家庭地址 from hello group by type having count(*) >1;

    
 

   如果对分组进行条件判断需要使用 having 函数。

问题3:查询每个人的家庭地址。

select y_name,type from hello group by y_name,type; 

    
 

   需要注意的是,如果使用的分组函数,则不可以返回其他普通列的数据。

   如:

       
如果分组列是type列。返回结果是y_name和type列,就会出现上图的错误。

如果想显示y_name的列,需要把y_name列分组,就可以显示y_name列数据。

 select y_name,type from hello group by y_name,type;

GROUP BY 子句 

  • 出现在 SELECT 列表中的字段或者出现在 order by 后面的字段,如果不是包含在分组函数中,那么该字段必须同时在 GROUP BY 子句中出现
  • 包含在 GROUP BY 子句中的字段则不必须出现在 SELECT 列表中
  • 可使用 where 字句限定查询条件
  • 可使用 Order by 子句指定排序方式
  • 如果没有 GROUP BY 子句, SELECT 列表中不允许出现字段(单行函数)与分组函数混用的情况

 Select avg(comm) from emp;--平均值

Select max(comm) from emp; --最大值 Select min(comm) from emp; --最小值 Select sum(comm) from emp; --总和 --分组列中空值,可使用Nvl()函数强制分组函数处理空值 select avg(nvl(comm, 0)) from emp;

猜你喜欢

转载自762612388.iteye.com/blog/2359700