`

Oracle_学习使用SQL语五(统计分组语句)

阅读更多

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

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



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

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

Oracle代码 复制代码
  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;  
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、去除重复值

Oracle代码 复制代码
  1. select count(distinct id) from cip_temps;  
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进行单列分组,如下:

Oracle代码 复制代码
  1. select id as id,min(age) max_age,max(age) max_age from cip_temps group by id;  
select id as id,min(age) max_age,max(age) max_age from cip_temps group by id;


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

Oracle代码 复制代码
  1. select id as id,count(age) count from cip_temps group by id having count(age)=2;  
select id as id,count(age) count from cip_temps group by id having count(age)=2;


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

Oracle代码 复制代码
  1. case when 条件 then 返回值1 when 条件2 then 返回值2 else 返回值3 end  
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为。
示例如下:

Oracle代码 复制代码
  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;  
select mod(10,4) from dual;
select round(101234.567,-4) from dual;
select round(101.234567,4) from dual;
select trunc(101234.457,2) from dual;
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日。
示例如下:

Oracle代码 复制代码
  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;  
select round(sysdate,'yyyy') from dual;
select round(sysdate,'mm') from dual;
select round(sysdate,'dd') from dual;
select trunc(sysdate,'yyyy') from dual;
select trunc(sysdate,'mm') from dual;
select trunc(sysdate,'dd') from dual;


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

Oracle代码 复制代码
  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;  
select to_date('2009-3-1','yyyy-mm-dd') from dual;
select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;
select to_number('10.123') from dual;


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

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


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

Oracle代码 复制代码
  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  

http://shawnfree.iteye.com/blog/357375

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    oracle_V$SQLAREA_.rar_oracle_oracle V$sqlarea

    在Oracle数据库系统中,`V$SQLAREA` 是一个非常重要的动态性能视图,它提供了关于解析、编译和执行的SQL语句的详细信息。这个视图是DBA和性能调优专家用来监控和分析SQL性能的关键工具。标题中的"oracle_V$SQLAREA_....

    oracle_commond.rar_odbc api_oracle_oracle 客户端_oracle sql_sql

    在"oracle常用命令集.sql"中,可能包含了如DML(INSERT、UPDATE、DELETE)语句,DDL(CREATE、ALTER、DROP)语句,以及查询优化技巧,例如使用索引、子查询、联接操作等。 4. 数据库操作实例 描述中的"oracle常用...

    ORACLE__SQL语句教学

    ORACLE__SQL语句教学 ORACLE__SQL语句教学

    Oracle_PL-SQL.rar_ORACLE PL_oracle_oracle sql_oracle 教程_pl sql

    5. **存储过程和函数**:存储过程是一组预编译的PL/SQL语句,可以在数据库中存储并重复调用,而函数则返回一个值,两者都是数据库模块化设计的基础。 6. **触发器**:触发器是一种特殊的存储过程,会在特定的数据库...

    SQL(oracle).rar_oracle_oracle sql_oracle 总结_pl sql_sql

    例如,它可能详细讲解了如何使用SELECT语句进行复杂查询,包括聚合函数(如COUNT, SUM, AVG)以及GROUP BY和HAVING子句用于数据分组和过滤。此外,可能还介绍了JOIN操作,如内连接(INNER JOIN)、外连接(OUTER JOIN)...

    ORACLE__SQL语句教学(附有sql最常用经典语句)

    本资源"ORACLE__SQL语句教学(附有sql最常用经典语句)"显然是一个针对Oracle SQL的深入学习资料,旨在帮助数据库编程者提升技能,成为真正的高手。 首先,让我们来看看SQL的基本概念。SQL是一种用于管理关系型...

    ORACLE_SQL_ALL.rar_oracle_oracle sql_sql优化

    - **SQL语句类型**:包括SELECT用于查询,INSERT用于插入,UPDATE用于更新,DELETE用于删除记录等。 - **子查询与连接**:理解如何使用子查询和不同类型的连接(内连接、外连接、自连接)来处理复杂的数据关系。 ...

    Oracle Sql语句转换成Mysql Sql语句

    在使用这个工具时,开发者需要确保源代码中的SQL语句是标准的Oracle SQL格式,避免使用特定Oracle数据库的特性,以提高转换的成功率。同时,转换后还需要对生成的MySQL SQL进行测试,确保在目标数据库环境中能正常...

    Oracle-SQL.rar_oracle_oracle sql_sql

    10. **数据库连接与管理工具**:如SQL*Plus、SQL Developer等,是与Oracle数据库交互的常用工具,它们能帮助我们执行SQL语句,管理数据库对象,以及监控数据库状态。 通过这份“Oracle SQL.ppt”,初学者可以逐步...

    ORACLE_SQLDeveloper使用教程

    本文详细介绍了如何使用 Oracle SQL Developer 和其他开发工具,包括 Oracle Database Home Page 的使用方法、如何在 Oracle 中使用 SQL*Plus、如何使用 SQL Developer 操作 Oracle 数据库以及如何执行 SQL 语句等...

    oracle_dynamic_sql.rar_Dynamic SQL ORAC_oracle_oracle dynam_orac

    在Oracle中,动态SQL是一种重要的编程技术,尤其在处理不确定或在运行时才能确定的SQL语句时,它显得尤为关键。本文将深入探讨动态SQL的使用及其在级联删除中的应用。 首先,让我们理解什么是动态SQL。在静态SQL中...

    msmmPrj.rar_The Oracle_oracle dynamic sql

    在Oracle中,动态SQL是一种重要的编程技术,它允许我们在运行时构建和执行SQL语句,使得程序能根据不同的条件或参数执行不同的查询。"msmmPrj.rar_The Oracle_oracle dynamic sql"这个压缩包文件很可能包含了关于...

    sqlapi_oracle.rar_SQLAPI_oracle_sqlapi++

    1. **创建SQL语句对象**:使用`SASqlString`或`SASqlStatement`类来构建SQL语句。 2. **执行DML语句**:对于INSERT、UPDATE、DELETE语句,可以调用`ExecuteUpdate()`方法: ```cpp SASqlString sql("INSERT INTO ...

    ORACLE_SQL语句优化技术分析

    ### ORACLE SQL语句优化技术分析 #### 一、选择最有效率的表名顺序(仅在基于规则的优化器中有效) 在Oracle数据库中,SQL语句的执行效率受到很多因素的影响,其中之一就是表名的顺序。Oracle的解析器会按照从右至...

Global site tag (gtag.js) - Google Analytics