- 浏览: 813365 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (413)
- 项目 (12)
- 统计分析 (3)
- java (7)
- jquery (15)
- oracle (33)
- 面试题 (8)
- 排序算法 (3)
- 蛇形矩阵算法 (3)
- 字符串 (1)
- ICU分析插件 (1)
- html5 (1)
- Ubuntu (4)
- Linux (4)
- memcache (2)
- myeclipse (3)
- hadoop (18)
- hbase (14)
- hive (7)
- zookeeper (2)
- pig (0)
- mysql (11)
- Redis (8)
- MongoDB (7)
- Cassandra (0)
- Neo4j (0)
- springMVC (3)
- ibatis (1)
- mahout (0)
- Highcharts (1)
- maven (7)
- 生活随笔 (6)
- 存储过程 (4)
- mybatis (3)
- bootstrap (19)
- 工作中遇到的问题 (23)
- node.js (3)
- web前段 (6)
- AngularJS (5)
- GIT (2)
- nginx (5)
- hive,sqoop (1)
- 高并发 (2)
- 算法 (3)
- 工具类 (2)
- ckeditor (1)
- java代码自动生成 (3)
- ueditor (6)
- svn (4)
- easyui (3)
- 数据挖掘 (4)
- ligerUi (1)
- fullcalendar (1)
- 微信公众号开发 (1)
- tomcat (2)
- 面试 (7)
- 数据库性能优化 (2)
- R语言 (3)
- R (6)
- ylcf (39)
- CentOS (13)
- docker (28)
- Spring Boot (10)
- Nexus (1)
- thymeleaf (2)
- nodejs (2)
- swagger (1)
- Jenkins (1)
- SpringCloud (9)
- vue (1)
- springClould问题汇总 (3)
- layui (1)
最新评论
-
greatwqs:
在前置请求页面返回token, 在提交接口中验证token, ...
Spring MVC 用拦截器+token防止重复提交 -
zhukewen_java:
这种方法的缺陷在于如果请求了两个save=true的方法,后面 ...
Spring MVC 用拦截器+token防止重复提交 -
byrgl5:
请问如果重复提交了三次呢?能避免吗?
Spring MVC 用拦截器+token防止重复提交 -
381895649:
是不是有病?
服务器被如下ip攻击,如何根据ip超找攻击来源 -
greatwqs:
最棒的10款MySQL管理工具
准备工作: table:oracle用户scott下的emp表 ; 一. Oracle 从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是 对于每个组返回多行,而聚合函数对于每个组只返回一行。 exp: Sql代码 1.select t.empno,t.ename,sum(t.sal) from emp t select t.empno,t.ename,sum(t.sal) from emp t 这样会报:ORA-00937:非单组分组函数; 结论:聚合函数只能返回1行值。 Sql代码 1.select t.empno,t.ename,sum(t.sal)over() sum from emp t select t.empno,t.ename,sum(t.sal)over() sum from emp t 返回的结果: empno ename sum 7369 SMITH 142781.99 7499 ALLEN 142781.99 7521 WARD 142781.99 7566 JONES 142781.99 7654 MARTIN 142781.99 7698 BLAKE 142781.99 7782 CLARK 142781.99 7788 SCOTT 142781.99 7839 KING 142781.99 7844 TURNER 142781.99 7876 ADAMS 142781.99 7900 JAMES 142781.99 7902 FORD 142781.99 7934 MILLER 142781.99 结论:这就是每个组返回多行。 二. over()、over(order by...)与over(partition by...)之间的区别 1.分析函数over()用在聚合函数(max(),sun()....)后面,可返回多行所有结果的聚合值; exp:如上; 2.over(order by...)用在聚合函数(max(),sun()....)后面,可返回根据排序结果进行统计到当前行的聚合值(即“连续”统计); exp: Sql代码 1.select t.empno, 2. t.deptno, 3. t.ename, 4. t.sal, 5. sum(t.sal) over(order by t.ename) sum 6. from emp t select t.empno, t.deptno, t.ename, t.sal, sum(t.sal) over(order by t.ename) sum from emp t 返回的结果: empno deptno ename sal sum 7876 20 ADAMS 4646.11 4646.11 7499 30 ALLEN 8493.66 13139.77 7698 30 BLAKE 15047.69 28187.46 7782 10 CLARK 11823.85 40011.31 7902 20 FORD 14935.97 54947.28 7900 30 JAMES 4935.36 59882.64 7566 20 JONES 15086.30 74968.94 7839 10 KING 23841.13 98810.07 7654 30 MARTIN 6526.80 105336.87 7934 10 MILLER 6167.32 111504.19 7788 20 SCOTT 12710.16 124214.35 7369 20 SMITH 4089.17 128303.52 7844 30 TURNER 7843.77 136147.29 7521 30 WARD 6634.70 142781.99 分析:第二行的sum=第一行里的sal+第二行里的sal; 第二行的sum=第一行里的sal+第二行里的sal+第三行里的sal; ..... 结论:返回值是根据排序后的结果,当前所在的行进行统计的。 3.over(partition by...)用在聚合函数(max(),sun()....)后面,可根据pratition by里指定的某一列来统计聚合值。 exp: Sql代码 1.select t.empno, 2. t.deptno, 3. t.ename, 4. t.sal, 5. sum(t.sal) over(partition by t.deptno) sum 6. from emp t select t.empno, t.deptno, t.ename, t.sal, sum(t.sal) over(partition by t.deptno) sum from emp t 返回的结果: empno deptno ename sal sum 7782 10 CLARK 11823.85 41832.3 7839 10 KING 23841.13 41832.3 7934 10 MILLER 6167.32 41832.3 7369 20 SMITH 4089.17 51467.71 7876 20 ADAMS 4646.11 51467.71 7902 20 FORD 14935.97 51467.71 7788 20 SCOTT 12710.16 51467.71 7566 20 JONES 15086.30 51467.71 7499 30 ALLEN 8493.66 49481.98 7698 30 BLAKE 15047.69 49481.98 7654 30 MARTIN 6526.80 49481.98 7900 30 JAMES 4935.36 49481.98 7844 30 TURNER 7843.77 49481.98 7521 30 WARD 6634.70 49481.98 分析:每个sum的值都是把deptno相同的sal值进行求和。 结论:根据pratition by里指定的某一列来统计聚合值。 三.一个综合的例子: exp: question: 按部门“连续”求总和; answer: Sql代码 1.select t.empno, 2. t.deptno, 3. t.ename, 4. t.sal, 5. sum(t.sal) over(partition by t.deptno order by t.ename) sum 6. from emp t select t.empno, t.deptno, t.ename, t.sal, sum(t.sal) over(partition by t.deptno order by t.ename) sum from emp t 返回的结果: empno deptno ename sal sum 7782 10 CLARK 11823.85 11823.85 7839 10 KING 23841.13 35664.98 7934 10 MILLER 6167.32 41832.3 7876 20 ADAMS 4646.11 4646.11 7902 20 FORD 14935.97 19582.08 7566 20 JONES 15086.30 34668.38 7788 20 SCOTT 12710.16 47378.54 7369 20 SMITH 4089.17 51467.71 7499 30 ALLEN 8493.66 8493.66 7698 30 BLAKE 15047.69 23541.35 7900 30 JAMES 4935.36 28476.71 7654 30 MARTIN 6526.80 35003.51 7844 30 TURNER 7843.77 42847.28 7521 30 WARD 6634.70 49481.98 分析:先根据partition by 进行分组,然后再根据order by 进行排序“连续”统计。 四.一个实际的例子来说明over()分析函数在代码上能简化和提高效率。 question: 查询出管理员工人数最多的人的名字和他管理的人的名字 answer: 1.普通的方法: Sql代码 1.select d.ename 管理员工人数最多的人的名字, o.ename 他管理的人的名字 2. from emp d, emp o 3. where o.empno = d.mgr 4. and d.empno in 5. (select p.empno 6. from emp p 7. where p.empno in 8. (select r.mgr 9. from (select e.mgr, count(e.mgr) c from emp e group by e.mgr) r 10. where r.c is 11. (select max(w.z) 12. from (select count(m.mgr) z from emp m group by m.mgr) w))) select d.ename 管理员工人数最多的人的名字, o.ename 他管理的人的名字 from emp d, emp o where o.empno = d.mgr and d.empno in (select p.empno from emp p where p.empno in (select r.mgr from (select e.mgr, count(e.mgr) c from emp e group by e.mgr) r where r.c is (select max(w.z) from (select count(m.mgr) z from emp m group by m.mgr) w))) 2.使用over()分析函数: Sql代码 1.select e.ename 管理员工人数最多的人的名字, j.ename 他管理的人的名字 2. from emp e, emp j 3. where j.empno = e.mgr 4. and e.empno in (select distinct (r.mgr) 5. from (select m.mgr, 6. count(m.mgr) over(partition by m.mgr order by m.empno) t 7. from emp m) r 8. where r.t is (select max(y.h) 9. from (select count(p.mgr) over(partition by p.mgr order by p.empno) h 10. from emp p) y)) select e.ename 管理员工人数最多的人的名字, j.ename 他管理的人的名字 from emp e, emp j where j.empno = e.mgr and e.empno in (select distinct (r.mgr) from (select m.mgr, count(m.mgr) over(partition by m.mgr order by m.empno) t from emp m) r where r.t is (select max(y.h) from (select count(p.mgr) over(partition by p.mgr order by p.empno) h from emp p) y)) 输出结果是一样的: 管理员工人数最多的人的名字 他管理的人的名字 BLAKE KING
发表评论
-
oracle jdbc链接SID和Service Name的区别
2018-12-24 09:27 1725application-dev.yml配置文件如下 eur ... -
Oracle批量操作
2018-04-24 15:52 502racle批量插入: Xml代码 & ... -
mybatis 需要注意的点 MyBatis 插入空值时,需要指定JdbcType (201
2018-03-07 10:19 1656Oracle数据库mybatis 插入空值时报错(with ... -
Oracle JDBC driver Maven配置
2018-03-05 13:41 1333问题: maven项目,spri ... -
ibatis结合Oracle的iterate insert批量插入
2018-02-27 13:50 1609ibatis批量插入oracle数据库 <inser ... -
数据库分页大全(oracle利用解析函数row_number高效分页)
2018-02-24 17:26 723最近在转换mysql项目到oracle项目,遇到mysql分 ... -
Mybatis结合Oracle的foreach insert批量插入
2018-02-24 14:17 3478最近在做将mysql数据库项目迁移到oracle数据库项目 ... -
oracle聚合函数汇总
2018-02-24 13:02 1687今天在做项目,讲mysql项目转换为oracle项目的时候, ... -
spring集中druid进行数据库监控
2018-02-11 17:52 1907Druid内置提供了一个StatViewServlet用于 ... -
mysql和oracle数据互相迁移
2018-02-11 15:53 854工作中,项目原本是mysql数据库 后台需要换成oracl ... -
[Navicat] 连接Oracle报错_Cannot load OCI DLL 87
2018-02-11 15:43 1947Navicat可以用来连接各 ... -
oracle批处理开启或者关闭服务
2013-12-16 22:53 1027机子上装着Oracle,但并不是很常要用到,所以把原先 ... -
oracle 正则表达式用法
2011-08-05 09:30 1741l 方括号表达示 方括号表达式 ... -
oracle case when 用法总结
2011-08-04 14:27 2976Oracle dbms_job package 用法小结 O ... -
Oracle语句优化30个规则详解
2011-08-04 11:07 2881select tab_name from tables ... -
oracle decode()函数用法总结
2011-08-04 10:06 3007·含义解释: decode(条件 ... -
Oracle中的Union,Union All,Intersect,Minus
2011-08-04 09:09 1175众所周知的几个结果 ... -
oracle partition by与group by 的区别
2011-08-03 10:49 10618SELECT b, c, d,SUM(d) O ... -
oracle executeimmediate用法小解
2011-08-03 09:16 1312EXECUTE IMMEDIATE 代替了以 ... -
oracle merge的用法
2011-08-02 17:53 1129MERGE语句是Oracle9i新增的语法,用来合并UPDAT ...
相关推荐
ORACLE的OVER函数使用技巧ORACLE的OVER函数使用技巧ORACLE的OVER函数使用技巧
在Oracle数据库中,OVER函数是用于实现窗口函数(Window Functions)的重要组成部分。窗口函数允许我们执行更复杂的数据分析操作,如计算累计总和、排名等。这在开发报表时非常有用,能够让我们在查询结果中直接进行...
### Oracle开发中的OVER函数详解 #### 一、Oracle分析函数简介 在Oracle数据库开发中,分析函数是一类非常强大的工具,主要用于实现复杂的查询需求,尤其是在处理大量数据时,能够提供高级的数据汇总、排序和筛选...
### Oracle分析函数详解 #### 一、Oracle分析函数概述 Oracle分析函数是在处理大量数据时极为有用的一套工具,主要用于在线分析处理(OLAP)场景。这类函数可以在多个级别上进行数据聚合,并支持复杂的排序、分组...
### Oracle分析函数OVER及开窗函数详解 #### 一、概述 在Oracle数据库中,分析函数(Analytic Functions)是一种非常强大的工具,用于处理复杂的查询需求。这些函数可以在一组相关的行上执行计算,并且每行返回一个...
根据提供的文件信息,我们可以深入探讨Oracle分析函数的相关知识点,特别是`SUM()`函数配合`OVER`子句的不同用法,以及`RANK()`, `DENSE_RANK()`, 和 `ROW_NUMBER()` 这三个窗口函数的应用场景。 ### Oracle分析...
### Oracle分析函数详解 #### 一、概述 Oracle分析函数是一种强大的工具,它允许用户对分组数据执行复杂的计算,并且结果可以根据特定条件进行动态调整。这种灵活性使得Oracle分析函数在处理复杂的数据集时非常...
Oracle分析函数是数据库管理系统Oracle中一组强大的工具,用于处理集合数据,特别是在复杂的报表和数据分析场景中。它们允许用户在单个SQL查询中执行聚合操作,同时保持行的原始顺序,这是传统的GROUP BY函数无法...
Oracle 分析函数、窗口函数和报表函数是数据库查询和数据分析中的关键工具,尤其在复杂的OLAP(在线分析处理)系统中发挥着重要作用。在Oracle数据库中,这些功能提供了对大量数据进行高效处理的能力,帮助用户生成...
总结来说,Oracle的RATIO_TO_REPORT()函数提供了计算数据占比的能力,而OVER()子句则允许我们灵活地指定计算范围。在实际业务场景中,这个功能可以帮助我们进行深入的数据分析,发现隐藏的模式和趋势,进而优化业务...
Oracle 分析函数详解 Oracle 分析函数是 Oracle 数据库中的一种强大功能,能够帮助用户快速进行数据分析和处理。在本文中,我们将对 Oracle 分析函数进行详细的介绍,并对其各个函数进行解释。 一、总体介绍 ...
Oracle分析函数是数据库管理系统Oracle中的一个强大特性,它允许用户在SQL查询中执行复杂的分析操作。分析函数在处理报表和数据迁移任务时尤其有用,因为它们可以基于分组计算聚合值,并为每个分组返回多行,而不...
Oracle 分析函数(用法+实例) Oracle 分析函数是 Oracle 8.1.6 版本中引入的高级应用,属于 Oracle 的一大亮点。分析函数可以分为四大类:排名函数、聚合函数、行比较函数和统计函数。下面将对分析函数的原理、...
Oracle 分析函数是一种强大的SQL工具,它允许你在处理数据时执行复杂的分析操作,而不像聚合函数那样仅仅返回单行结果。分析函数在Oracle 8.1.6版本中被引入,自那时起,它们已经成为数据库查询和报表生成的重要组成...
Oracle分析函数是数据库管理系统Oracle中的一个重要特性,自8.1.6版本开始引入,它们用于执行基于组的聚合计算,并且为每个组返回多行结果,而不仅仅是单行。这使得分析函数在数据分析和报表生成方面非常有用,能够...
### Oracle分析函数详解 #### 一、概述 Oracle分析函数是一种强大的工具,它自Oracle 8.1.6版本开始引入,并在后续版本中不断完善和发展。这类函数的主要用途在于能够针对一组数据执行复杂的聚合计算,并且不同于...
其中,Oracle的分析函数是其强大的特性之一,它允许用户在单个SQL查询中执行复杂的分析操作,而无需使用子查询或者自连接。这篇文档将深入探讨Oracle中的分析函数,帮助你更好地理解和利用这一功能。 一、什么是...
### Oracle分析函数及开窗函数详解 #### 一、Oracle分析函数概述 Oracle自8.1.6版本开始引入了分析函数,这类函数主要用于计算基于组的聚合值,并且与传统的聚合函数不同的是,分析函数可以针对每个组返回多行结果...
Oracle分析函数是数据库管理系统Oracle中的一种高级SQL特性,它允许用户在单个查询中对一组行进行计算,而无需使用子查询或自连接。这些函数极大地增强了数据分析和报告的能力,提高了查询性能。以下是对Oracle分析...
Oracle数据库中的常用函数是数据库管理员和开发人员在处理数据时不可或缺的工具。这些函数极大地提高了数据处理的效率和灵活性。以下是一些常见的Oracle分析函数及其用法: 1. **开窗函数(Over)**: 开窗函数允许...