- 浏览: 84358 次
- 性别:
- 来自: 深圳
-
最新评论
-
tanzizi1210:
非常不错的指导
oracle中去重复记录,不用distinct并可以过hibernate -
ralfsumahe:
与其他区分语言环境的类一样,可以使用静态工厂方法 getIns ...
java中文汉字排序 -
luorongda:
好详细.多谢.
spring中连接池的配置 -
luoli-17:
?????????????
textarea 光标处插入和滚动条移动 -
paul_yunzai:
兄弟。看到你的文章之后,我想说谢谢。帮助我解决了很棘手的问题。 ...
oracle中去重复记录,不用distinct并可以过hibernate
分析函数 : 分析函数用于计算基于组的某种聚合值, 聚合函数对于每个组只返回一行。
row_number(),rank()和dense_rank()的区别是:
row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).
与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪列rownum然后再进行排序,而此函数在包含排序从句后是先排序再计算行号码.
row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序).
rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).
dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的 .
lag(arg1,arg2,arg3):
arg1是从其他行返回的表达式
arg2是希望检索的当前行分区的偏移量。是一个正的偏移量,时一个往回检索以前的行的数目。
arg3是在arg2表示的数目超出了分组的范围时返回的值。
CREATE TABLE TABLE1
( "NAME" VARCHAR2(40 BYTE),
"CLASS" VARCHAR2(40 BYTE),
"SCORE" NUMBER,
"DATE" NUMBER
)
select class, rank()over(partition by class order by score desc) a from table1;
select class,row_number()over(order by class/score asc) as bb from table1;
select class, sum(score)over(partition by class order by class desc) as aa from table1;
1 20
2 15
3 14
4 18
5 30
规则:按天统计:每天都统计前面几天的总额
得到的结果:
DATE SALE SUM
----- -------- ------
1 20 20 --1天
2 15 35 --1天+2天
3 14 49 --1天+2天+3天
4 18 67 .
5 30 97 .
2:统计各班成绩第一名的同学信息
----- ----- ----------------------
fda 1 80
ffd 1 78
dss 1 95
cfe 2 74
gds 2 92
gf 3 99
ddd 3 99
通过:
--
select * from
(
select name,class,s,rank()over (partition by class order by s desc) mm from t2
)
where mm=1
--
得到结果:
NAME CLASS S MM
----- ----- ---------------------- ----------------------
dss 1 95 1
gds 2 92 1
gf 3 99 1
ddd 3 99 1
注意:
1.在求第一名成绩的时候,不能用row_number(),因为如果同班有两个并列第一,row_number()只返回一个结果
2.rank()和dense_rank()的区别是:
--rank()是跳跃排序,有两个第二名时接下来就是第四名
--dense_rank()l是连续排序,有两个第二名时仍然跟着第三名
3.分类统计 (并显示信息)
-- -- ----------------------
m a 2
n a 3
m a 2
n b 2
n b 1
x b 3
x b 2
x b 4
h b 3
得到结果:
A B C SUM(C)OVER (PARTITIONBYA)
-- -- ------- ------------------------
h b 3 3
m a 2 4
m a 2 4
n a 3 6
n b 2 6
n b 1 6
x b 3 9
x b 2 9
x b 4 9
如果用sum,group by 则只能得到
A SUM(C)
-- ----------------------
h 3
m 4
n 6
x 9
无法得到B列值
=====
select * from test
数据:
A B C
1 1 1
1 2 2
1 3 3
2 2 5
3 4 6
---将B栏位值相同的对应的C 栏位值加总
select a,b,c, SUM(C) OVER (PARTITION BY B) C_Sum
from test
A B C C_SUM
1 1 1 1
1 2 2 7
2 2 5 7
1 3 3 3
3 4 6 6
---如果不需要已某个栏位的值分割,那就要用 null
eg: 就是将C的栏位值summary 放在每行后面
select a,b,c, SUM(C) OVER (PARTITION BY null) C_Sum
from test
A B C C_SUM
1 1 1 17
1 2 2 17
1 3 3 17
2 2 5 17
3 4 6 17
求个人工资占部门工资的百分比
SQL> select * from salary;
NAME DEPT SAL
---------- ---- -----
a 10 2000
b 10 3000
c 10 5000
d 20 4000
SQL> select name,dept,sal,sal*100/sum(sal) over(partition by dept) percent from salary;
NAME DEPT SAL PERCENT
---------- ---- ----- ----------
a 10 2000 20
b 10 3000 30
c 10 5000 50
d 20 4000 100
开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:
1:
over (order by salary) 按照salary排序进行累计,order by是个默认的开窗函数
over (partition by deptno)按照部门分区
2:
over (order by salary range between 5 preceding and 5 following)
每行对应的数据窗口是之前行幅度值不超过5,之后行幅度值不超过5
例如:对于以下列
aa
1
2
2
2
3
4
5
6
7
9
sum(aa)over (order by aa range between 2 preceding and 2 following)
得出的结果是
AA SUM
---------------------- -------------------------------------------------------
1 10
2 14
2 14
2 14
3 18
4 18
5 22
6 18
7 22
9 9
就是说,对于aa=5的一行 ,sum为 5-1<=aa<=5+2 的和
对于aa=2来说 ,sum=1+2+2+2+3+4=14 ;
又如 对于aa=9 ,9-1<=aa<=9+2 只有9一个数,所以sum=9 ;
3:其它:
over (order by salary rows between 2 preceding and 4 following)
每行对应的数据窗口是之前2行,之后4行
4:下面三条语句等效:
over (order by salary rows between unbounded preceding and unbounded following)
每行对应的数据窗口是从第一行到最后一行,等效:
over (order by salary range between unbounded preceding and unbounded following)
等效
over (partition by null)
发表评论
-
oracle 执行计划之sql trace
2010-04-12 15:11 10791.设置init.ora(spfile用户将需要使用alter ... -
oracle 执行计划4
2010-03-02 23:39 881将语句中加入hints,让oracle的优化器使用嵌套循环,并 ... -
oracle 执行计划3
2010-03-02 23:35 887环境:oracle 817 + linux + 阵列柜 ... -
oracle 执行计划2
2010-03-02 23:29 856三.表之间的连接 Join是一种试图将两个表结合在一起 ... -
oracle 执行计划1
2010-03-02 23:28 782一.相关的概念 Rowid的 ... -
dba常用检查脚本
2009-05-26 17:32 990检查警告文件,跟踪文件,备分情况 1.表空间的使用情况: ... -
oracle db 死锁
2008-12-26 18:06 1005--查找锁死的session select a.object_ ... -
数字求和问题字符串分组相加
2008-11-08 12:32 2653数字8546把各个位数相加 create or replace ... -
Oracle用Start with...Connect By子句递归查询(2)
2008-11-08 12:25 2281start with ... connect by用法简介 ... -
Oracle用Start with...Connect By子句递归查询(1)
2008-06-18 17:00 3128Start with...Connect By子句递归查询一般 ... -
sql一点点
2008-05-12 14:36 766com.microsoft.sqlserver.jdbc.SQ ... -
sql连接
2008-05-12 13:50 978join_type 指出连接类型,可分为三 ... -
synonym sequence 权限
2008-05-08 12:03 2263Oracle 创建用户 / 密码并授权 (1) ... -
在数据库中存储层次数据
2008-03-31 17:00 1651存储树形结构是一个很常见的问题,他有好几种解决方案。主要有两种 ...
相关推荐
function SearchMemo(Memo: TCustomEdit; const SearchString: string; Options: TFindOptions): Boolean; var Buffer, P: PChar; Size: Word; begin Result := False; if Length(SearchString) = 0 then ...
function LinesVisible(Memo: TMemo): integer; Var OldFont : HFont; Hand : THandle; TM : TTextMetric; Rect : TRect; tempint : integer; begin Hand := GetDC(Memo.Handle); try ...
function OnBeforePrint() { var memo = this.Memo1; memo.Text = "打印前的内容"; } ``` 6. **处理多语言**:如果你的应用需要支持多语言,FastReport提供了处理多语言文本的能力。你可以为每个Memo创建多...
在某些情况下,我们需要在运行时动态地改变报表中的内容,例如更新Memo组件的文字。本文将深入探讨如何在Delphi中动态改变FastReport内的Memo内容。 首先,我们需要了解FastReport的基本工作原理。FastReport由多个...
这是一份oracle的大作业实验报告,里面有源代码以及实验报告。实验报告有20页,包含了整个项目的需求分析,界面实现,核心代码,数据库设计,功能演示等方面。项目是以网上订餐系统为需求,C#为用户界面,Oracle为...
### Delphi7中Memo组件实现查找替换功能 #### 一、引言 在软件开发过程中,文本处理是一项常见的需求,特别是在编写编辑器或文档管理工具时。Delphi作为一种高效的编程语言,提供了丰富的组件来帮助开发者快速构建...
在Delphi编程环境中, Memo 控件是一个常用的组件,用于显示和编辑多行文本。它通常被用作日志记录、用户输入或者简单的文本编辑。在某些情况下,我们可能需要动态地调整 Memo 控件的边框大小,以适应界面设计的变化...
在Delphi编程环境中,Memo组件是一个非常常用的文本编辑控件,它允许用户输入和查看多行文本。在某些应用场景中,比如代码编辑器或者文本高亮显示,我们可能需要实现特定关键字的高亮功能。本篇文章将详细讲解如何在...
MEMO控件MEMO控件
在Delphi和C++Builder这样的集成开发环境中,Memo组件是常用的文本输入和显示控件。本文将深入探讨如何实现和自定义Memo组件的语法高亮。 1. **什么是语法高亮?** 语法高亮是指在编辑器中,根据代码的不同元素...
在编程领域,尤其是在数据库操作中,"Memo"字段通常用于存储大段的文本信息,比如长篇文章、备注或日志。在Delphi中,当我们处理包含Memo字段的数据时,可能会遇到需要过滤这些字段的情况,例如根据某些关键词或者...
### Oracle 临时表用法详解 #### 一、背景与问题描述 在处理数据库操作时,经常遇到因数据量庞大而导致处理效率降低的问题。例如,某个报表中心的存储过程执行速度过慢,其中一个原因是该过程涉及到一个中间表,...
【标题】"Bonatic Memo" 是一款基于Visual Basic(VB)开发的应用程序,它扩展了系统内置记事本的功能,提供了更加丰富的文本编辑和管理体验。这款软件版本为"Bonatic Memo 2.0",意味着它至少经历了一次重大更新,...
在“navicat for oracle memo.docx”文档中,通常会包含Navicat for Oracle V11的详细操作指南和使用技巧,例如如何配置连接参数、创建新的数据库对象、执行SQL语句、进行数据同步以及设置数据库提醒等。这些说明将...
【MyMemo】是一款个人记忆管理应用,旨在帮助用户高效地整理、存储和检索各种信息。在深入探讨MyMemo的功能和特点之前,我们首先需要理解它所代表的核心概念——信息管理和记忆辅助。 信息管理是现代生活中的关键...
在这个“FastReport3.0以后版本动态改变Memo实用例子”中,我们将深入探讨如何在FastReport的高级版本中动态地修改Memo控件的内容,这对于开发具有交互性和实时性的应用程序至关重要。 首先,让我们理解FastReport...
本知识点主要探讨如何在运行时动态地更改FastReport中的Memo组件内容。 FastReport是一种可视化报表设计器,允许开发者创建复杂的报告布局,包括文本、图像、表格等元素。Memo组件在FastReport中用于显示多行文本,...
《Memo记事本 1.0.1.0:打造高效便捷的文本管理工具》 在信息化时代,人们日常工作中需要处理的信息量日益庞大,如何有效地管理这些信息变得至关重要。 Memo 记事本 1.0.1.0 正是这样一款针对这一需求而设计的增强...
在Delphi编程环境中, Memo组件是开发者常用的控件之一,用于显示和编辑多行文本。在实际应用中,我们有时需要对Memo组件的显示区域进行定制,比如设置边距,以便增强界面的美观性和用户体验。本篇文章将深入探讨...