Oracle之分组查询

来源:互联网 发布:linux怎么删除文件夹 编辑:程序博客网 时间:2024/04/29 18:45

分组查询

分组将 事物 按某方面 相同性质 进行归类。即在同组事物中,某方面性质是一致的;不同组之间,在指定性质上是不同的。按某指定性质分组后,一个包含有任意个对象的组会以该特性作为标识,整体作为一条记录呈现。

Oracle中,分组方式有两种。一种是Group by 方式;另一种是Having 方式。

Group by

        进行分组统计,使用聚合函数,可以统计组内某些性质的累加(SUM)、平均值(AVG)、最大值(MAX)、最小值(MIN)等等

  1. AVG 返回指定组中的平均值,空值被忽略。

     例:select prd_no,avg(qty) from sales group by prd_no 

  1. COUNT 返回指定组中项目的数量。

     例:select count(prd_no) from sales

  1. MAX 返回指定数据的最大值。

     例:select prd_no,max(qty) from sales group by prd_no

  1. MIN 返回指定数据的最小值。

     例:select prd_no,min(qty) from sales group by prd_no

  1. SUM 返回指定数据的和,只能用于数字列,空值被忽略。

     例:select prd_no,sum(qty) from sales group by prd_no

      说明:

                    第1、3、4、5项,根据prd_no进行分组,返回两列数据,prd_no及其对应的统计值。

                    第2项,统计sales表中 “prd_no=指定值” 的记录数。


Having

where子句只能对没有分组统计前的数据行进行筛选,对分组后的条件的筛选必须使用having子句

例:

selectstudentID as 学员编号,courseID as 内部测试,avg(score) as 内部测试平均成绩

fromscore

groupby studentID,courseID

havingavg(score)>60

在select语句中,where、groupby、having子句和统计函数的执行次序如下:

where子句从数据源中去掉不符合去搜索条件的数据;groupby子句搜集数据行到各个组中,统计函数为各个组计算统计值;having子句去掉不符合其组搜索条件的各组数据行 。


下面为朋友们准备了一个演练场:

          1. 外键数大于1,查出该外键(fgn_key)及相应的多条记录——

select id,fgn_key from T_Table where fgn_key in(select fgn_key from T_Table group by fgn_key having count(fgn_key)>1  ) order by fgn_key
 
如果朋友们在开发过程中对分组有特殊的运用,或者遇到比较巧妙的分组运用,请贴于下方,共同交流!


参考资料:SQL分组查询 、聚合函数

0 0