oracle聚合函数使用----总结中

来源:互联网 发布:淘宝网苏泊尔电饭煲 编辑:程序博客网 时间:2024/05/16 08:55

Oracle数据库中的函数很多,其分组函数和聚合函数是Oracle函数中比较常用的函数。
     分组函数有Group by 函数,聚合函数有count()、sum()、avg()、max()、min()等等,这里做一些自己的总结,会不断的更新本文的内容。

  • CREATE TABLE STUDENT
    (
        STU_NAME                       VARCHAR2(10),
        STU_NO                         NUMBER(5,0) PRIMARY KEY NOT NULL,
        STU_AGE                        NUMBER(3,0)
    )
  •  
  • 1. select count(STU_AGE) from STUDENT
  • 检索项目中只有聚合函数count(),则一定检索到一条数据,表STUDENT中没有数据,则结果为0,
  • 表STUDENT中有数据,则为数据的件数。
  •  
  • 2. select sum(STU_AGE) from STUDENT
  • 检索项目中只有聚合函数sum(),则一定检索到一条数据,表STUDENT中没有数据,则结果为null,
  • 表STUDENT中有数据,则为每条数据的STU_AGE的和。
  •  
  • 使用数据库查看工具可能看不到null的效果,反而跟没有使用sum()函数检索到数据的结果一样,例如:
  • select STU_AGE from STUDENT 结果和select sum(STU_AGE) from STUDENT结果在数据库查看工具中一样,但是在java代码中可以看到区别,前面sql文检索到0条数据,后面的sql文检索到1条数据,但数据的结果为null。
  •  
  • 在数据库查看工具中使用下面的方式区分:
  • select nvl(sum(STU_AGE),0) from STUDENT 结果为0,
  • nvl()函数是在检索结果中(存在至少一条数据),如果字段STU_AGE的值为NULL,则用0来替换NULL,
  • 上面的sql文因为使用nvl后的显示结果为0,说明检索到一条数据了。
  •  
  • 检索项目中不只有聚合函数sum(),eg:
  • select STU_NAME,sum(STU_AGE) from STUDENT group by STU_NAME
  • 则存在检索不到数据的情况,例如表STUDENT中没有数据,检索到0件数据。
  •  
  • 在数据库查看工具中使用nvl的方式:如下
  • select STU_NAME,nvl(sum(STU_AGE),0) from STUDENT group by STU_NAME
  • 检索结果中不存在0,说明没有检索到数据。

为什么会产生上面的结果,我正在查询中?可能需要了解sql执行顺序机制,以及执行中什么时候终止。

  • 3.聚合函数avg()、max()、min()的情况和sum()函数一样,自己可以试一下。
  •