`
penggle
  • 浏览: 58397 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

oracle over()分析函数的例子

阅读更多
oracle over()函数,从oracle 8i开始支持,后面的版本支持的比较好.
通常在做统计分析时我们都想尽可能多滴选择出原始列和统计值列,但是这样group by后面就必须跟随更多的列,使用分析函数可以避免使用group by时选择出来的列名必须出现在group by列表中的痛苦.

--1、over() 注(9i下over括号内必须有内容,不允许为空,本文所有示例均在10g下运行的)
--所有人的总工资
select a.empno, a.ename, sum(a.sal) over() total from emp a;

EMPNO	ENAME	TOTAL
7369	SMITH	29025
7499	ALLEN	29025
7521	WARD	29025
7566	JONES	29025
7654	MARTIN	29025
7698	BLAKE	29025
7782	CLARK	29025
7788	SCOTT	29025
7839	KING	29025
7844	TURNER	29025
7876	ADAMS	29025
7900	JAMES	29025
7902	FORD	29025
7934	MILLER	29025

--2、over(partition by ...) 分组统计
--统计部门的平均工资
select a.empno,
       a.ename,
       b.dname,
       to_char(round(avg(a.sal) over(partition by b.dname), 2),'$999,999,999.99') dept_avg
  from emp a, dept b
 where a.deptno = b.deptno;

EMPNO	ENAME	DNAME	        DEPT_AVG
7934	MILLER	ACCOUNTING      $2,916.67
7839	KING	ACCOUNTING      $2,916.67
7782	CLARK	ACCOUNTING      $2,916.67
7876	ADAMS	RESEARCH	    $2,175.00
7902	FORD	RESEARCH	    $2,175.00
7566	JONES	RESEARCH	    $2,175.00
7369	SMITH	RESEARCH	    $2,175.00
7788	SCOTT	RESEARCH	    $2,175.00
7521	WARD	SALES	        $1,566.67
7844	TURNER	SALES	        $1,566.67
7499	ALLEN	SALES	        $1,566.67
7900	JAMES	SALES	        $1,566.67
7698	BLAKE	SALES	        $1,566.67
7654	MARTIN	SALES	        $1,566.67

--查询出管理员工人数最多的人的名字和他管理的人的名字
select b.ename, t.ename, t.mgr, t.cnt
  from (select a.empno,
               a.ename,
               a.mgr,
               count(1) over(partition by a.mgr) cnt
          from emp a) t,
       emp b
 where t.mgr = b.empno;

ENAME	ENAME	MGR	CNT
JONES	SCOTT	7566	2
JONES	FORD	7566	2
BLAKE	WARD	7698	5
BLAKE	TURNER	7698	5
BLAKE	ALLEN	7698	5
BLAKE	JAMES	7698	5
BLAKE	MARTIN	7698	5
CLARK	MILLER	7782	1
SCOTT	ADAMS	7788	1
KING	BLAKE	7839	3
KING	JONES	7839	3
KING	CLARK	7839	3
FORD	SMITH	7902	1

--3、over(order by ...) 排序统计
select a.empno,
       a.deptno,
       a.ename,
       a.sal,
       sum(a.sal) over(order by a.ename) sum
  from emp a;

EMPNO	DEPTNO	ENAME	SAL	SUM
7876	20	ADAMS	1100.00	1100
7499	30	ALLEN	1600.00	2700
7698	30	BLAKE	2850.00	5550
7782	10	CLARK	2450.00	8000
7902	20	FORD	3000.00	11000
7900	30	JAMES	950.00	11950
7566	20	JONES	2975.00	14925
7839	10	KING	5000.00	19925
7654	30	MARTIN	1250.00	21175
7934	10	MILLER	1300.00	22475
7788	20	SCOTT	3000.00	25475
7369	20	SMITH	800.00	26275
7844	30	TURNER	1500.00	27775
7521	30	WARD	1250.00	29025

--4、over(partition by ... order by ...) 分组排序统计
--统计各部门薪水前三名的人员
select t.*
  from (select rank() over(partition by b.dname order by a.sal desc) rk,
               a.empno,
               a.ename,
               b.dname,
               a.sal
          from emp a, dept b
         where a.deptno = b.deptno) t
 where t.rk <= 3;

RK	EMPNO	ENAME	DNAME	         SAL
1	7839	KING	ACCOUNTING	     5000.00
2	7782	CLARK	ACCOUNTING	     2450.00
3	7934	MILLER	ACCOUNTING	     1300.00
1	7902	FORD	RESEARCH	     3000.00
1	7788	SCOTT	RESEARCH	     3000.00
3	7566	JONES	RESEARCH	     2975.00
1	7698	BLAKE	SALES	         2850.00
2	7499	ALLEN	SALES	         1600.00
3	7844	TURNER	SALES	         1500.00
分享到:
评论

相关推荐

    oracle 分析函数详解(有例子)

    1 Oracle开发专题之:分析函数 OVER 2 Oracle开发专题之:分析函数 Rank Dense rank row number 3 Oracle开发专题之:分析函数3 Top Bottom N First Last NTile 4 Oracle开发专题之:窗口函数 5 Oracle开发专题...

    oracle 分析函数学习笔记

    Oracle 分析函数是一种高级SQL功能,它允许在单个查询中对数据集进行复杂的分析,无需额外的编程或多次数据库交互。分析函数处理的结果通常基于数据的分组、排序或特定窗口,为统计汇总和复杂的数据分析提供了便利。...

    oracle分析函数文档

    ### Oracle分析函数详解 #### 一、概述 Oracle分析函数是一种强大的工具,它允许用户对分组数据执行复杂的计算,并且结果可以根据特定条件进行动态调整。这种灵活性使得Oracle分析函数在处理复杂的数据集时非常...

    Oracle百分比分析函数RATIO_TO_REPORT() OVER()实例详解

    Oracle数据库中的RATIO_TO_REPORT()函数是一个非常有用的分析函数,尤其在进行数据比例分析和比较时。这个函数能够计算一个值相对于所有值总和的比例,返回的结果是一个百分比。配合OVER()子句,它可以用于全局或者...

    ORACLE 分析函数大全

    分析函数的一个典型例子是`AVG()`,它可以计算数据窗口内的平均值。在提供的示例中,`AVG(salary) OVER (PARTITION BY manager_id ORDER BY hire_date ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)`计算每个经理手下...

    oracle分析函数参考手册

    ### Oracle分析函数详解 #### 一、概述 Oracle分析函数是一种强大的工具,它允许用户对分组数据执行复杂的计算,并且能够返回多个结果行。这与传统的聚合函数(如`SUM`、`COUNT`等)形成鲜明对比,后者通常只针对...

    ORACLE分析函数

    根据提供的文件信息,我们可以深入探讨Oracle分析函数的相关知识点,特别是`SUM()`函数配合`OVER`子句的不同用法,以及`RANK()`, `DENSE_RANK()`, 和 `ROW_NUMBER()` 这三个窗口函数的应用场景。 ### Oracle分析...

    Oracle之分析函数 常用的分析函数

    Oracle分析函数是数据库查询中的一种高级工具,特别设计用于处理复杂的报表统计需求。它们与传统的聚合函数(如SUM, AVG, COUNT等)有所不同,因为分析函数能够在数据集上进行分组计算,同时为每组的每一行返回一个...

    oracle常用分析函数与聚合函数的用法

    在Oracle数据库中,分析函数和聚合函数是SQL查询中用于处理和汇总数据的重要工具。本文将详细介绍两者的主要功能和用法。 首先,我们关注的是排名函数。在Oracle中,有三种常用的排名函数: 1. `RANK()`: 这个函数...

    oracle 分析函数总结

    Oracle分析函数包括许多内置函数,如AVG、COUNT、MAX、MIN、SUM等,但作为分析函数使用时,它们会在OVER()子句中指定特定的行为。例如,AVG()分析函数可以计算每个分组或窗口内的平均值,而不只是整个数据集的平均值...

    Oracle分析函数详解.doc

    1. **over()** 关键字:这是识别分析函数的关键,告诉Oracle你将使用一个分析函数。 2. **analytic-function**:这是指定的分析函数,如SUM, AVG, COUNT, RANK等。Oracle提供了多种分析函数,满足不同的需求。 3. **...

    oracle开窗函数学习技巧总结

    `OVER`函数是Oracle开窗函数的核心组成部分,它定义了一个计算上下文或窗口,在这个窗口内可以执行各种类型的聚合计算。`OVER`函数的基本语法如下: ``` function_name(...) OVER (window_specification) ``` 其中...

    oracle分析函数row_number() over()使用

    Oracle的分析函数row_number() over()是数据库查询中一种强大的工具,它用于对数据集进行分组和排序,尤其在处理重复数据或者实现排名时非常有用。在Oracle SQL中,row_number()函数会为每一行生成一个唯一的数字,...

    Oracle分析函数基本概念和语法总结及Regexp_***用法

    Oracle分析函数是数据库管理系统Oracle中的一种高级查询工具,它们用于处理行集,计算基于特定窗口内的数据的聚合值。分析函数的主要特点是返回的结果不仅仅是一行,而是多行,这与传统的聚合函数(如SUM, AVG等)...

    Oracle之分析函数讲解及PPT资源.zip

    举个例子,假设我们有一个销售表,包含产品ID、销售日期和销售额,我们可以使用分析函数来计算每种产品的累计销售额: ```sql SELECT product_id, sale_date, sales_amount, SUM(sales_amount) OVER (PARTITION BY...

    【转】Oracle分析函数简述

    Oracle分析函数是数据库管理系统Oracle中的一种高级查询工具,它们在SQL查询中用于处理集合数据,提供了对一组行进行计算的能力,而不仅仅局限于单行或单列。这些函数使得数据库管理员和开发人员能够进行复杂的统计...

    Oracle分析函数参考手册

    ### Oracle分析函数参考手册知识点详解 #### 一、Oracle分析函数概述 Oracle分析函数自8.1.6版本起引入,主要用于对数据进行更复杂的分析处理。与传统的聚合函数(如SUM, AVG等)不同,分析函数能够在分组的基础上...

    oracle分析函数.doc

    ### Oracle分析函数详解 #### 一、引言与背景 在数据库领域,Oracle数据库因其卓越的性能和丰富的功能而备受企业级应用的青睐。在众多的功能中,分析函数(Analytic Function)是一种强大的工具,它允许用户在不...

    ORACLE分析函数.pptx

    Oracle分析函数是数据库查询中的一个重要工具,它们在处理聚合数据时提供了一种强大的方式,特别是在进行复杂的数据分析和报表生成时。本PPT将深入探讨Oracle分析函数的实践应用。 首先,让我们看一个具体的例子,...

    oracle分析函数介绍

    以下是一个使用这些分析函数的例子,假设我们想计算每个区域、网络类型的月度本地费用的总和,以及占所有区域费用的百分比,并找出每个月的第一笔和最后一笔费用: ```sql SELECT BILL_MONTH, AREA_CODE, ...

Global site tag (gtag.js) - Google Analytics