oracle(41)

在 应用系统开发中,进行需要统计数据库中的数据,当执行数据统计时,需要将表中的数据进行分组显示,在统计分组中是通过group by子句、分组函数、having子句共同实现的。其中group by子句用于指定要分组的列,而分组函数用户指定显示统计的结果,而having子句用户限制显示分组结果。 
   一、分组函数 
   分组函数用于统计表的数据,并作用于多行,但是返回一个结果,一般情况下,分组函数要与group by子句结合使用,Oracle数据库提供了大量的分组函数,常用的五个分组函数:

  1. Max:该函数用于取得列或表达式的最大值,适用于任何数据类型。
  2. Min:该函数用于取得列或表达式的最小值,适用于任何数据类型。
  3. Avg:该函数用于取得列或表达式的平均值,适用于数字类型。
  4. Sum:该函数用于取得列或表达式的总和,  适用于数字类型。
  5. Count:该函数用于取的行数总和。

注意: 
1、当使用分组函数时,分组函数只能出现在选择列表、order by和having子句中,而不能出现在where、group by子句中。 
2、当使用分组函数时,除了函数count(*)外,其他分组函数都会忽略NULL行。 
3、当执行select语句时,如果选择列表同时包括列、表达式和分组函数,那么这些列、表达式必须出现在group by子句中。 
4、当使用分组函数时,在分组函数中可以指定all和distinct选项,其中all是默认选项,该选项表示统计所有行数据(包括重复行),distinc可以统计不同行数据。

示例如下: 
1、取得某列最小值、最大值、平均值、总和和总计行数

  1. select max(id) as max_id,min(id) as min_id,avg(id) as avg_id,sum(id) as sum_id,count(*) as count from cip_temps;

2、去除重复值

  1. select count(distinct id) from cip_temps;

二、group by和having子句 
   group by子句是对统计的结果进行分组统计,而having子句用于限制分组显示结果,语法如下: 
select column,group_function from table [where condition][group by group_by_experssion][having group_function];如上所示,column用于指定列表中的列或表达式,group_function用于指定分组函数,condition用于指定条件子句,group_by_experssion用于指定分组表达式,group_function用于指定排除分组结果条件。 
1、使用group by进行单列分组,如下:

  1. select id as id,min(age) max_age,max(age) max_age from cip_temps group by id;

2、使用having子句限制分组显示结果,如下:

  1. select id as id,count(age) count from cip_temps group by id having count(age)=2;

三、case表达式 
case格式如下:

  1. case when 条件 then 返回值1 when 条件2 then 返回值2 else 返回值3 end

示例如下: 
select name,age,address,case when id=21 then 'abc' when id=22 then 'def' else 'hij' end alias from cip_temps; 
四、Oracle常用统计函数 
1、数字函数 
  (1)、mod(m,n)该函数用于返回取得两个数字相除后的余数,如果数字为0,则返回结果为m。 
  (2)、round(n,[m]该函数用于取得四舍五入运算,如果省略m,则四舍五入至整数位;如果m是负数,则四舍五入到小数点前m位;如果m是正数,则四舍五入到小数点后m位。 
  (3)、trunc(n,[m])该函数用于截取数字,如果省略m,则将数字n的小数部门截取;如果m为正数,则将数字n截取至小数点后的第m位,如果m为负数,则将数字n截取小数点的前m为。 
示例如下:

  1. select mod(10,4) from dual;
  2. select round(101234.567,-4) from dual;
  3. select round(101.234567,4) from dual;
  4. select trunc(101234.457,2) from dual;
  5. select trunc(101234.457,-2) from dual;

2、日期函数 
   (1)、round(d,[fmt])该函数用于返回日期时间的四舍五入结果,如果fmt指定年度,则7月1日为分割线;如果fmt指定月,则16日为分割线;如果fmt指定为天,则中午12:00为分割线。 
   (2)、trunc(d,[fmt])该函数用于截取日期时间数据,如果fmt指定年度,则结果为本年度的1月1日,如果fmt指定月,则结果为本月1日。 
示例如下:

  1. select round(sysdate,'yyyy') from dual;
  2. select round(sysdate,'mm') from dual;
  3. select round(sysdate,'dd') from dual;
  4. select trunc(sysdate,'yyyy') from dual;
  5. select trunc(sysdate,'mm') from dual;
  6. select trunc(sysdate,'dd') from dual;

3、转换函数 
    (1)、to_char(date,fmt)该函数用于将日期类型转换为字符串类型,其中fmt用于指定日期格式。 
    (2)、to_date(char,fmt)该函数用于将符合特定日期格式的字符串转变为date类型的值。 
    (3)、to_number(char)该函数用于将符合特定数字格式的字符串转换为数字类型。 
示例如下:

  1. select to_date('2009-3-1','yyyy-mm-dd') from dual;
  2. select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;
  3. select to_number('10.123') from dual;

4、其他单行函数

(1)、decode(expr,search1,result1[,search2,result2,...],default)该函数用于返回匹配于
特定表达式结果,如果search1匹配与expr,则返回结果result1,如果search2匹配expr,则返回结果result2,以此类推,
如果没有任何匹配关系,则返回默认default。 
示例如下:

  1. select name,decode(age,'bb21',id*10,'bb22',id*20,1000) as decodee from cip_temps;

注意:decode函数和case表达式的用法基本相似,但是case表达式可以多个条件进行判断,从而返回结果。 
示例如下:

    1. select name,case when (
    2. (age='bb21' and address='cc21')
    3. or (age='bb22' and address='cc22')
    4. or (age='bb23' and address='cc23')
    5. ) then 1 else 0 end as cases from cip_temps

Oracle中SQL语句学习五(统计分组语句group by和having)的更多相关文章

  1. oracle中sql语句的优化

    oracle中sql语句的优化 一.执行顺序及优化细则 1.表名顺序优化 (1) 基础表放下面,当两表进行关联时数据量少的表的表名放右边表或视图: Student_info   (30000条数据)D ...

  2. Oracle中SQL语句分类

    Oracle中SQL语句分类如下:1.DML语句 insert/delete/update/select/merge/explan plan/lock table2.DDL语句 create/atlt ...

  3. 转:Oracle中SQL语句执行过程中

    Oracle中SQL语句执行过程中,Oracle内部解析原理如下: 1.当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法.表名.字 ...

  4. oracle 中SQL 语句开发语法 SELECT INTO含义

    oracle 中SQL 语句开发语法 SELECT INTO含义 在ORACLE中SELECT INTO是如何使用的,什么意思?和SQL SERVER的不一样?   和sqlserver的不一样sql ...

  5. 使用PL/SQL能查询oracle中数据,在for update 语句中一直卡住

    原因:在oracle中,执行了update或者insert语句后,都会要求commit,如果不commit却强制关闭连接,oracle就会将这条提交的记录锁住.下次就不能执行增删操作. 解决:1.查询 ...

  6. 跟踪oracle中sql语句运行过程及相关知识拓展

    select * from v$sqlarea; select * from v$sqlarea where first_load_time>'2010-11-27/09:30:00'; 这种方 ...

  7. SQL数据库学习,常用语句查询大全

    数据库学习 sql server数据库基本概念 使用文件保存数据存在几个缺点: 1.文件的安全性问题: 2.文件不利于查询和对数据的管理: 3.文件不利于存放海量数据 4.文件在程序中控制不方便. 数 ...

  8. MySQL、Oracle和SQL Server的分页查询语句

    假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询: SELECT * FROM s ...

  9. Oracle中SQL调优(SQL TUNING)之最权威获取SQL执行计划大全

    该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅 ...

随机推荐

  1. linux性能监控三张图

    一.监控 二.测试 三.优化

  2. win8.1 安装webaccess遇到的写访问权限错误

    大学的时候闲暇时间都用来玩游戏了,现在工作了,就把工作中遇到的问题和学习心得跟大家共享下,若有不对的地方欢迎指出,谢谢! 前几天突然想换用vs2013开发,就重装了win8.1系统,在新系统上安装we ...

  3. web开发 - 从零开始 - 02 - 常用标签

    1.a  : href 属性为id,即为锚点:文件路径,则为下载链接: 新窗口打开文件,target = "_blank";当前窗口打开,target="_self&qu ...

  4. java中两个对象间的属性值复制,比较,转为map方法实现

    package com.franson.study.util; import java.lang.reflect.InvocationTargetException; import java.lang ...

  5. SQL Server 查看数据表占用空间大小的SQL语句

    ) ) if object_id('tempdb..#space') is not null drop table #space ),rows ),data ),index_size ),unused ...

  6. day2_python学习笔记_chapter4_标准类型和内建函数

    1. 标准类型 Integer,Boolean, Long integer, Floating point real number, Complex number, String, List, Tup ...

  7. 【Android】创建Popwindow弹出菜单的两种方式

    方法一的Activity package com.app.test02; import android.app.Activity; import android.os.Bundle; import a ...

  8. R与数据分析旧笔记(八)多重共线性

    多重共线性(线性代数叫线性相关) 多重共线性(线性代数叫线性相关) 1.什么是多重共线性 2.多重共线性对回归模型的影响 3.利用计算特征根发现多重共线性 4.Kappa()函数 例题1 考虑一个有六 ...

  9. codeforces 633C. Spy Syndrome 2 hash

    题目链接 C. Spy Syndrome 2 time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  10. 新浪sae 项目之 git 配置

    新浪sae 项目现在支持git 配置了,但是有好多人配置不成功.下面对这个问题进行一个总结. 1. 在新浪云上面新建项目(该步骤省略) 2. 一般新建完毕后,会让你选择代码的管理工具,如下 注意这里, ...