`
q272156430
  • 浏览: 275843 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

oracle 统计分组语句

阅读更多

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

   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、取得某列最小值、最大值、平均值、总和和总计行数

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、去除重复值

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进行单列分组,如下:

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


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

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


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

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为。
示例如下:

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日。
示例如下:

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)该函数用于将符合特定数字格式的字符串转换为数字类型。
示例如下:

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。
示例如下:

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


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

select name,case when (   
             (age='bb21' and address='cc21')    
             or (age='bb22' and address='cc22')    
             or (age='bb23' and address='cc23')    
           ) then 1 else 0 end as cases from cip_temps  
 
分享到:
评论

相关推荐

    Oracle分组统计

    Oracle 分组统计 Oracle 分组统计是数据库开发中常用的技术之一。它可以根据不同的条件对数据进行分组和聚合统计。分组统计的目的是将数据按照某种条件分组,然后对每个组进行聚合计算,最后输出结果。 分组统计...

    oracle的SQL语句的一些经验总结

    Oracle SQL语句是数据库管理员和开发人员在处理Oracle数据库时不可或缺的工具。它允许用户查询、更新、插入和删除数据,以及执行各种复杂的数据库操作。以下是对"Oracle的SQL语句的一些经验总结"中可能涉及的关键...

    oracle分组排序统计高级用法

    ### Oracle 分组排序统计高级用法详解 #### 一、Oracle分组排序和统计概述 在Oracle数据库中,实现分组排序和统计是一项常见的需求,主要用于处理大量的数据,并从中提取有价值的信息。通过合理运用SQL语句,特别...

    Oracle经典SQL语句

    4. **聚合函数和分组**:GROUP BY和HAVING语句用于对数据进行分组并应用聚合函数,这对于统计分析非常有用。HAVING是在GROUP BY之后过滤结果的,不同于WHERE,它可以在聚合函数上进行条件过滤。 5. **视图**:视图...

    Oracle——sql语句优化

    对于复杂的查询,尤其是涉及分组和统计的场景,IN操作符的转换机制可能失效。因此,在高负载、频繁访问的系统中,应谨慎使用IN操作符,考虑采用其他更高效的查询方式。 **推荐方案**:在业务密集场景下,尽量避免...

    oracle sql语句学习

    Oracle SQL语句是数据库管理与数据查询的重要工具,尤其在大型企业级应用中,Oracle数据库系统因其稳定性、高效性及广泛的功能支持而被广泛应用。本资料包“Oracle SQL语句学习”旨在帮助初学者从基础入手,逐步掌握...

    oracle常用SQL语句下载

    通过熟练运用这些语句,可以实现复杂的数据分析和管理任务,无论是简单地获取数据,还是进行聚合计算,甚至是高级的多表连接和分组分析,Oracle SQL都能提供强大支持。在实际工作中,根据需求灵活组合使用这些语句,...

    Oracle常用语句-总结文档汇总

    "Oracle常用语句-总结文档汇总"提供了丰富的资源,涵盖了SQL语句的基础到进阶应用,包括列行转换、SQL性能优化等多个关键知识点。 首先,列行转换是数据处理中常见的需求,Oracle提供了多种方法来实现这一操作。...

    oracle常用经典语句

    6. 分组查询:GROUP BY语句用于根据一个或多个列对结果进行分组。 ```sql SELECT department_id, COUNT(*) FROM employees GROUP BY department_id; ``` 7. 聚合函数:如COUNT(), SUM(), AVG(), MAX()和MIN()用于...

    Oracle sql 语句集锦

    根据给定的文件信息,以下是对Oracle SQL语句集锦中的关键知识点的详细解析: ### Oracle SQL基础操作 #### 数据定义语言(DDL) - **创建表(Create Table)**: `CREATE TABLE`语句用于在数据库中创建一个新的表...

    Oracle选择语句.txt

    根据提供的文件信息,我们可以深入探讨Oracle数据库中的SELECT语句及其用法。在Oracle数据库中,SELECT语句是最常用的SQL查询语言之一,用于从一个或多个表中检索数据。本篇文章将详细解析两个示例中的SELECT语句,...

    Oracle中用GROUPING SETS分组自定义汇总

    在Oracle数据库中,进行数据分析和报表制作时,我们经常需要对数据进行分组汇总,以得到不同层次的统计结果。`GROUP BY`语句是实现这一功能的基础,但默认情况下,它只提供单级的汇总信息。为了获取多级或自定义的...

    Oracle数据库分组查询练习题(包答案)

    根据提供的信息,我们可以详细解析与Oracle数据库分组查询相关的知识点,并通过具体的练习题目来加深理解。下面将逐一分析每一个题目中的关键知识点。 ### Oracle数据库分组查询知识点详解 #### 1. 查询部门20的...

    oracle函数和分组

    1. **GROUP BY子句**:用于将数据按照一个或多个列进行分组,通常与聚合函数(如COUNT、SUM、AVG、MAX、MIN)一起使用,以便对每个组进行统计计算。 2. **HAVING子句**:在GROUP BY之后过滤结果,与WHERE子句类似,...

    Oracle数据库按时间进行分组统计数据的方法

    Oracle按不同时间分组统计的sql 如下表table1: 日期(exportDate) 数量(amount) -------------- ----------- 14-2月 -08 20 10-3月 -08 2 14-4月 -08 6 14-6月 -08 75 24-10月-09 23 14-11月-09 45 04-8月 -10 5 ...

    oracle 分组函数

    本篇文章将详细阐述Oracle分组函数的概念、功能以及常用分组函数的使用方法。 一、分组函数概述 分组函数主要作用于一组数据上,而不是单个记录,它们用于对数据进行汇总,如计算总和、平均值、最大值、最小值等。...

    使用Oracle的SQL函数实现工作日和节假日分组统计.pdf

    使用Oracle的SQL函数实现工作日和节假日分组统计 本文介绍了使用Oracle的SQL函数来实现工作日和节假日的分组统计,通过对工作日和节假日的判断和统计,可以更好地合理调度人力物力资源,制定节假日劳务补贴政策。...

    oracle经典sql语句练习题和答案

    1. **基础查询**:查询所有员工的姓名和职位,或者按部门分组统计各部门的员工数量。 2. **连接查询**:使用INNER JOIN将`emp`和`dept`表连接,显示每个员工所在的部门名称。 3. **条件查询**:找出特定职位(如'...

    Oracle_sql语句练习

    根据给定文件的标题“Oracle_sql语句练习”及其描述“Oracle_sql语句以及sql语句”,我们可以深入探讨一系列关键的SQL操作,这些操作对于任何希望精通Oracle数据库的人员都是必不可少的知识点。 ### 1. 权限管理:...

    面试oracle必备的sql语句

    ### 面试Oracle必备的SQL语句知识点详解 #### 1. 查看表空间的名称及大小 在Oracle数据库管理中,了解每个表空间的大小对于资源管理和优化至关重要。以下SQL语句可以帮助我们获取各个表空间的名称及其总大小(以MB...

Global site tag (gtag.js) - Google Analytics