1-函数分组
数据分析常用函数

数据分析常用函数数据分析是指对收集到的数据进行整理、分析和解释,以提取有价值的信息和洞察力的过程。
在进行数据分析时,常常需要使用一些常用函数来处理和分析数据。
下面是一些常用的数据分析函数的介绍。
1.基本统计函数:- sum(:计算一组数据的总和。
- count(:计算一组数据的个数。
- mean(:计算一组数据的平均值。
- median(:计算一组数据的中位数。
- mode(:计算一组数据的众数。
- min(:找出一组数据中的最小值。
- max(:找出一组数据中的最大值。
- range(:计算一组数据的范围。
2.数据处理函数:- sort(:对一组数据进行排序。
- filter(:根据特定条件筛选数据。
- drop(:删除一组数据中的指定列或行。
- replace(:替换一组数据中的一些特定值。
- unique(:找出一组数据中的唯一值。
- trim(:去除一组数据中的空格和特殊字符。
3.数据分组函数:- groupby(:根据一些变量将数据进行分组。
- count(:对分组后的数据进行计数。
- sum(:对分组后的数据进行求和。
- mean(:对分组后的数据进行求平均值。
- max(:对分组后的数据找出最大值。
- min(:对分组后的数据找出最小值。
4.数据合并函数:- merge(:将两个数据集按照指定的键进行合并。
- concat(:将两个数据集按照行或列进行拼接。
- join(:将两个数据集按照索引进行合并。
- append(:将两个数据集按照行进行拼接。
- map(:根据指定的映射关系将两个数据集进行合并。
5.数据转换函数:- pivot(:将数据从长格式转换为宽格式。
- melt(:将数据从宽格式转换为长格式。
- stack(:将数据从宽格式转换为层级格式。
- unstack(:将数据从层级格式转换为宽格式。
- transpose(:将数据进行转置。
6.绘图函数:- plot(:绘制一组数据的图表。
r语言分组拟合曲线

r语言分组拟合曲线在R语言中,可以使用不同的函数和包来进行分组拟合曲线。
下面我将从多个角度介绍几种常用的方法。
1. 使用基本的统计函数:R语言中的基本统计函数如`lm()`和`loess()`可以用于拟合曲线。
`lm()`函数用于拟合线性回归模型,可以通过添加多项式项来拟合非线性曲线。
例如,可以使用`lm(y ~ poly(x, degree))`来拟合x和y之间的多项式关系,其中degree是多项式的阶数。
`loess()`函数用于拟合局部加权平滑曲线,可以通过调整span参数来控制平滑程度。
2. 使用ggplot2包:ggplot2是R语言中常用的数据可视化包,可以通过它进行分组拟合曲线的绘制。
首先,需要将数据按照分组变量进行分组,然后使用`geom_smooth()`函数来拟合曲线。
例如,可以使用`geom_smooth(method = "lm")`来拟合线性回归曲线,或者使用`geom_smooth(method = "loess")`来拟合局部加权平滑曲线。
3. 使用nlme包:nlme包是R语言中用于拟合非线性混合效应模型的包,可以用于拟合分组拟合曲线。
首先,需要定义一个适当的非线性模型,然后使用`nlme()`函数进行模型拟合。
例如,可以使用`nlme(y ~f(x, params), data = df, fixed = params ~ group, random =~1 | group)`来拟合带有分组效应的非线性模型,其中f()是非线性函数,params是模型参数,group是分组变量。
4. 使用mgcv包:mgcv包是R语言中用于拟合广义可加模型的包,可以用于拟合分组拟合曲线。
首先,需要定义一个适当的广义可加模型,然后使用`gam()`函数进行模型拟合。
例如,可以使用`gam(y ~ s(x, by = group), data = df)`来拟合带有分组效应的平滑曲线,其中s()是平滑函数,by参数指定按照分组变量进行平滑。
excel 分组函数

excel 分组函数
Excel中的分组函数有很多种,以下是其中的几种:
1. 求和函数SUM:用于计算一定区域内数值的总和,语法为
=SUM(选定的数值区域)。
2. 平均数函数AVERAGE:用于计算一定区域内数值的平均数,语法为=AVERAGE(选定的数值区域)。
3. 计数函数COUNT:用于计算一定区域内数值的个数,语法为=COUNT(选定的数值区域)。
4. 最大值函数MAX:用于计算一定区域内数值的最大值,语法为=MAX(选定的数值区域)。
5. 最小值函数MIN:用于计算一定区域内数值的最小值,语法为=MIN(选定的数值区域)。
6. 计数非空函数COUNTA:用于计算一定区域内非空单元格的个数,语法为=COUNTA(选定的区域)。
7. 计数空单元格函数COUNTBLANK:用于计算一定区域内空单元格的个数,语法为=COUNTBLANK(选定的区域)。
以上这些函数可以用于数据的统计和分析,让用户轻松地获取所需的信息,并快速作出决策。
Excel高级技巧利用条件函数进行数据分类和分组

Excel高级技巧利用条件函数进行数据分类和分组Excel高级技巧:利用条件函数进行数据分类和分组Excel是一款功能强大的电子表格软件,除了常见的数据计算和图表制作功能外,还有许多高级技巧可以帮助我们更加高效地处理和分析数据。
其中之一就是利用条件函数进行数据分类和分组。
本文将介绍如何使用Excel中的条件函数,比如IF函数、COUNTIF函数、SUMIF函数等,来对数据进行分类和分组。
一、IF函数的使用IF函数是Excel中常用的条件函数,它可以根据某个条件的满足与否,返回不同的值。
在数据分类和分组中,我们可以利用IF函数对数据进行筛选和分类。
例如,我们有一个销售数据表,其中有一个“销售额”列。
我们想要对这些销售额进行分类,将销售额大于5000的标记为“高销售额”,小于5000的标记为“低销售额”。
在Excel表格中,选择一个空白单元格,输入以下公式:=IF(A2>5000,"高销售额","低销售额")其中,A2表示销售额所在的单元格。
按下回车,公式会根据条件判断结果显示“高销售额”或“低销售额”。
二、COUNTIF函数的使用COUNTIF函数是用来统计某个范围内满足条件的单元格的个数。
在数据分组中,COUNTIF函数可以帮助我们计算符合条件的数据个数。
假设我们有一个学生成绩表,其中有一个“分数”列。
我们想要统计分数大于等于60的学生人数。
在Excel表格中,选择一个空白单元格,输入以下公式:=COUNTIF(B2:B10,">=60")其中,B2:B10表示分数所在的单元格范围。
按下回车,公式会统计出分数大于等于60的学生人数。
三、SUMIF函数的使用SUMIF函数是用来计算某个范围内满足条件的单元格的数值之和。
在数据分组中,SUMIF函数可以帮助我们计算符合条件的数据的总和。
继续以学生成绩表为例,假设我们想要计算分数大于等于60的学生的总分。
excel随机分组函数

excel随机分组函数最近,我发现有很多人在寻找一种能够快速、方便地实现随机分组的方法。
在Excel中,我们可以使用RAND()函数和一些简单的公式来实现这个目标。
下面,我将为大家介绍一种实现Excel随机分组的方法。
首先,我们需要准备一份名单,例如学生名单、员工名单等等。
在这个名单中,每个人应该有一个唯一的编号,例如学生编号、员工编号等等。
接下来,我们需要在Excel中创建一个新的工作表。
在工作表中,我们需要输入以下公式:=INT((ROW()-ROW($A$1))/N)+1其中,N是我们希望每组有多少人。
例如,如果我们希望每组有5个人,那么N就应该设置为5。
在这个公式中,ROW()函数用于获取当前单元格所在的行数。
ROW($A$1)函数用于获取第一个单元格的行数。
通过这两个函数的差值,我们可以得到当前单元格所在的行数相对于第一个单元格的偏移量。
然后,我们将偏移量除以N,取整数部分。
这样,我们就可以得到当前单元格所在的组别。
接下来,我们需要使用另一个公式来随机分组。
在新的一列中,输入以下公式:=RAND()该公式会生成一个0到1之间的随机数。
然后,我们需要选中这一列的所有单元格,按照随机数进行排序。
这样,我们就可以将所有人随机分配到不同的组别中。
最后,我们可以使用VLOOKUP函数将原始名单中的编号和姓名与新的分组信息相对应。
这样,我们就可以轻松地实现Excel随机分组了。
总结一下,我们可以使用RAND()函数和一些简单的公式来实现Excel随机分组。
这种方法非常方便,而且可以应用于各种类型的名单,例如学生名单、员工名单等等。
EXCEL控的数据分组技巧

EXCEL控的数据分组技巧Excel是一款功能强大的电子表格软件,广泛应用于各个行业和领域。
在处理大量数据时,合理的数据分组技巧能够提高工作效率和数据处理的准确性。
本文将介绍几种Excel控的数据分组技巧,帮助您优化数据处理流程。
一、基本数据分组在Excel中,我们经常需要对大量数据进行分类和汇总。
以下是一些基本的数据分组技巧,可以帮助您快速进行数据分析和汇总。
1. 列数据分组要对一列数据进行分组,可以使用Excel的"数据"选项卡中的"分类汇总"功能。
选择待分组的列,点击"分类汇总",在弹出的窗口中选择相应的参数,如所需的汇总函数、分组范围等,点击"确定"即可生成分组汇总报表。
2. 行数据分组类似于列数据分组,我们也可以对行数据进行分组。
选中待分组的行,按照上述步骤进行分类汇总,即可得到行数据的分组汇总结果。
3. 多列数据分组如果需要对多列数据进行分组,可以借助Excel的"数据透视表"功能。
将待分组的数据导入透视表中,选择需要分组的列,Excel会自动按照所选列的值进行分组和汇总,生成透视表报表。
二、高级数据分组除了基本的数据分组技巧外,Excel还提供了一些高级的数据分组技巧,可以满足更多复杂场景下的需求。
1. 按数值范围分组有时候我们需要根据数值的范围对数据进行分组,例如将销售额分成几个档次进行统计。
这时可以使用Excel的"自定义分组"功能。
选中待分组的数据列,点击"数据"选项卡中的"分类汇总",在弹出的窗口中选择"自定义分组",输入各个分组的范围,点击"确定"即可实现按照数值范围分组。
2. 按日期分组对于包含日期的数据,我们可以按照年、月、季度等时间单位进行分组汇总。
选中日期所在的列,点击"数据"选项卡中的"分类汇总",选择日期的分组单位,点击"确定"即可按照日期进行分组汇总分析。
excel 随机分组函数

excel 随机分组函数摘要:1.介绍Excel 随机分组函数2.随机分组函数的语法和参数3.随机分组函数的使用方法和示例4.总结随机分组函数的作用和应用场景正文:Excel 随机分组函数是一种在Excel 中实现随机分组的函数,可以帮助用户实现对数据进行随机分组,从而实现更加公平的分组。
在Excel 中,随机分组函数主要包括“RAND()”和“RANDBETWEEN()”函数。
1.介绍Excel 随机分组函数Excel 随机分组函数是一种在Excel 中实现随机分组的函数,可以帮助用户实现对数据进行随机分组,从而实现更加公平的分组。
在Excel 中,随机分组函数主要包括“RAND()”和“RANDBETWEEN()”函数。
2.随机分组函数的语法和参数- RAND() 函数:语法:`=RAND()`参数:无返回值:返回一个大于等于0 且小于1 的随机数。
- RANDBETWEEN() 函数:语法:`=RANDBETWEEN(bottom, top)`参数:- bottom:必需参数,指定随机数的最小值(包括)。
- top:必需参数,指定随机数的最大值(不包括)。
返回值:返回一个指定范围内的随机整数。
3.随机分组函数的使用方法和示例- 使用RAND() 函数:示例:`=RAND()`,返回一个大于等于0 且小于1 的随机数。
- 使用RANDBETWEEN() 函数:示例:`=RANDBETWEEN(1, 10)`,返回一个介于1 和10 之间的随机整数。
4.总结随机分组函数的作用和应用场景随机分组函数在Excel 中有着广泛的应用,尤其是在需要实现随机分组的情况下。
例如,在进行抽奖活动时,可以使用随机分组函数来实现随机抽奖;在进行问卷调查时,可以使用随机分组函数来实现随机抽样。
Excel使用技巧利用函数进行数据分组与汇总

Excel使用技巧利用函数进行数据分组与汇总Excel使用技巧:利用函数进行数据分组与汇总在日常办公中,Excel是一款功能强大的电子表格软件,被广泛应用于数据处理、分析和汇总方面。
为了更加高效地处理大量数据,我们可以运用Excel中的函数,通过数据分组与汇总功能,快速地将复杂数据进行整理和呈现。
本文将介绍一些利用Excel函数进行数据分组与汇总的技巧,帮助你更好地利用Excel进行数据处理。
一、数据分组技巧1. 按照某一列值进行分组Excel提供了一个非常实用的功能——“排序与筛选”,可以帮助我们将数据按照某一列值进行分组。
具体操作是:选中需要分组的列,点击“数据”选项卡中的“排序与筛选”,选择“高级”。
在弹出的对话框中,选择“将数据区域分成组并排序”,然后选中需要分组的列,点击“确定”即可。
通过此方法,我们可以迅速将数据按照某一列的值进行分组,方便后续汇总和统计。
2. 利用数据透视表进行分组除了“排序与筛选”,Excel还提供了另一个强大的功能——“数据透视表”。
通过数据透视表,我们可以快速地对数据进行分组、汇总和透视分析。
具体操作是:选中需要制作数据透视表的数据区域,点击“插入”选项卡中的“数据透视表”。
在弹出的对话框中,选中需要分组的列,并将其拖放到“行标签”区域或“列标签”区域,然后选择需要进行汇总的列并将其拖放到“值”区域。
最后点击“确定”即可生成数据透视表。
通过数据透视表,我们可以方便地实现对数据的灵活分组和精确汇总。
二、数据汇总技巧1. 利用SUM函数进行求和在Excel中,SUM函数可以用于对一列或多列数值进行求和。
具体操作是:选择需要进行求和的单元格,然后输入“=SUM(选择的单元格范围)”并按下回车键即可计算所选单元格范围内数值的总和。
例如,若需要求解A1到A10的数值之和,可以输入“=SUM(A1:A10)”。
通过利用SUM函数,我们可以方便地对多列数据进行求和,实现快速汇总的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
隨機函數,分組排序,分組函數,多表插入或更新(merge),批量綁定,通用函數1. rownum的區間查詢DROP TABLE t_a;CREATE TABLE t_a (card_code VARCHAR2(3), q NUMBER, bal NUMBER);INSERT INTO t_a SELECT 001 card_code, ROWNUM q, trunc(dbms_random.VALUE * 100) bal FROM dual CONNECT BY ROWNUM <= 4 UNION SELECT 002 card_code, ROWNUM q, trunc(dbms_random.VALUE * 100) bal FROM dual CONNECT BY ROWNUM <= 4; SELECT * FROM t_a;select * from t_a where rownum>=1;select * from t_a where rownum>=3;select * from t_a where rownum<=3;select * from t_a where rownum<3;select * from t_a where rownum>3;select * from t_a where rownum>1;select * from (select card_code,q,bal,row_number()over(order by bal) as num from t_a) where num>2 and num<6; SELECT ROWNUM r, t.* FROM t_a t ORDER BY t.bal DESC;為何行號是亂的?因先分配行號,再排序SELECT ROWNUM r, t.* FROM (SELECT t.* FROM t_a t ORDER BY t.bal DESC) t;應該先排序再分配行號2.行列轉換a.行轉列SELECT a.card_code,SUM(decode(a.q, 1, a.bal, 0)) q1,SUM(decode(a.q, 2, a.bal, 0)) q2,SUM(decode(a.q, 3, a.bal, 0)) q3,SUM(decode(a.q, 4, a.bal, 0)) q4FROM t_a aGROUP BY a.card_codeORDER BY1;b.列轉行DROP TABLE t_b;CREATE TABLE t_b AS SELECT a.card_code, SUM(decode(a.q, 1, a.bal, 0)) q1, SUM(decode(a.q, 2, a.bal, 0)) q2, SUM(decode(a.q, 3, a.bal, 0)) q3, SUM(decode(a.q, 4, a.bal, 0)) q4 FROM t_a a GROUP BY a.card_code ORDER BY 1; SELECT * FROM t_b;SELECT t.card_code,t.rn q,decode(t.rn, 1, t.q1, 2, t.q2, 3, t.q3, 4, t.q4) balFROM (SELECT a.*, b.rnFROM t_b a, (SELECT ROWNUM rn FROM dual CONNECT BY ROWNUM <= 4) b) tORDER BY1, 2;c.行轉列合併DROP TABLE t_c;CREATE TABLE t_c AS SELECT card_code, bal||q as q FROM t_a;SELECT * FROM t_c;SELECT t1.card_code, substr(MAX(sys_connect_by_path(t1.q, ';')), 2) qFROM (SELECT a.card_code,a.q,row_number() over(PARTITION BY a.card_code ORDER BY a.q) rnFROM t_c a) t1START WITH t1.rn = 1CONNECT BY t1.card_code = PRIOR t1.card_codeAND t1.rn - 1 = PRIOR t1.rnGROUP BY t1.card_code;d.列轉行分割DROP TABLE t_d;CREATE TABLE t_d ASSELECT t1.card_code, substr(MAX(sys_connect_by_path(t1.q, ';')), 2) qFROM (SELECT a.card_code,a.q,row_number() over(PARTITION BY a.card_code ORDER BY a.q) rnFROM t_c a) t1START WITH t1.rn = 1CONNECT BY t1.card_code = PRIOR t1.card_codeAND t1.rn - 1 = PRIOR t1.rnGROUP BY t1.card_code;SELECT t.card_code,substr(t.q,instr(';' || t.q, ';', 1, rn),instr(t.q || ';', ';', 1, rn) - instr(';' || t.q, ';', 1, rn)) qFROM (SELECT a.card_code, a.q, b.rnFROM t_d a,(SELECT ROWNUM rn FROM dual CONNECT BY ROWNUM <= 100) bWHERE instr(';' || a.q, ';', 1, rn) > 0) tORDER BY1, 2;3.刪除重復記錄set timing on;Drop table test1;Create table test1 ( ID NUMBER,SEQ NUMBER);declarei number;j number;beginfor i in1..2loopfor j in1..10000loopinsert into test1values (j, j + 10);end loop;commit;end loop;end;/法一:使用臨時表進行刪除set timing on;create table test2 as select distinct*from test1;truncate table test1;insert into test1 select * from test1;rollback;法二: 使用自連接+rowid進行刪除select a.*, a.rowid, b.*, b.rowid from test1 a, test1 b where a.id = b.id and a.seq = b.seq and a.id =1; DELETE FROM test1 t1 WHERE t1.ROWID NOT IN (SELECT MAX(t2.rowid) FROM test1 t2 WHERE t1.id = t2.id ANDt1.seq = t2.seq);Rollback;DELETE FROM test1 WHERE ROWID NOT IN (SELECT MAX(ROWID) FROM test1 GROUP BY id, seq);Rollback;法三:用row_number():delete from test1where rowid not in (select t.rowidfrom (select d.id,d.seq,row_number() over(partition by id || seq order by id || seq) row_flagfrom test1d) twhere t.row_flag > 1);-- 某欄位重復DROP TABLE t_dup;CREATE TABLE t_dup AS SELECT 'code_'||ROWNUM code, dbms_random.string('z',5) NAME FROM dual CONNECT BY ROWNUM<=10; INSERT INTO t_dup SELECT 'code_'||ROWNUM code, dbms_random.string('z',5) NAME FROM dual CONNECT BY ROWNUM<=2; SELECT * FROM t_dup;SELECT * FROM t_dup a WHERE a.ROWID <> (SELECT MIN(b.ROWID) FROM t_dup b WHERE a.code=b.code);SELECT b.code, FROM (SELECT a.code,,row_number() over(PARTITION BY a.code ORDER BY a.ROWID) rnFROM t_dup a) bWHERE b.rn > 1;delete t_dupwhere rowid in (SELECT b.rowidFROM (SELECT a.code,,row_number() over(PARTITION BY a.code ORDER BY a.ROWID) rnFROM t_dup a) bWHERE b.rn > 1);4.實現一條記錄根據條件多表插入DROP TABLE t_ia_src;CREATE TABLE t_ia_src AS SELECT'a'||ROWNUM c1, 'b'||ROWNUM c2FROM dual CONNECT BY ROWNUM<=5; DROP TABLE t_ia_dest_1;CREATE TABLE t_ia_dest_1(flag VARCHAR2(10) , c VARCHAR2(10));DROP TABLE t_ia_dest_2;CREATE TABLE t_ia_dest_2(flag VARCHAR2(10) , c VARCHAR2(10));DROP TABLE t_ia_dest_3;CREATE TABLE t_ia_dest_3(flag VARCHAR2(10) , c VARCHAR2(10));SELECT * FROM t_ia_src;SELECT * FROM t_ia_dest_1;SELECT * FROM t_ia_dest_2;SELECT * FROM t_ia_dest_3;INSERT ALLWHEN (c1IN ('a1', 'a3')) THEN INTO t_ia_dest_1 (flag, c) VALUES (flag1, c2)WHEN (c1IN ('a2', 'a4')) THEN INTO t_ia_dest_2 (flag, c) VALUES (flag2, c2)ELSE INTO t_ia_dest_3 (flag, c) VALUES (flag1 || flag2, c1 || c2) SELECT c1, c2, 'f1'flag1, 'f2'flag2FROM t_ia_src;-- 如果存在就更新,不存在就插入用一個語句實現DROP TABLE t_mg;CREATE TABLE t_mg(code VARCHAR2(10), NAME VARCHAR2(10));SELECT * FROM t_mg;MERGE INTO t_mg aUSING (SELECT'the code'code, 'the name'NAME FROM dual) bON (a.code = b.code)WHEN MATCHED THENUPDATE SET = WHEN NOT MATCHED THENINSERT (code, NAME) VALUES (b.code, );5.通用函數select 1 from dual where null=null;select 1 from dual where null='';select 1 from dual where ''='';select 1 from dual where null is null;select 1 from dual where nvl(null,0)=nvl(null,0);select 1+null from dual;select 1-null from dual;select 1*null from dual;select 1/null from dual;conn scott/tiger@6088;select * from emp t;select * from emp t where comm like'%';select NVL(1000,12) FROM DUAL;select NVL(null,12) FROM DUAL;SELECT NVL2(12,1,-1) FROM dual;SELECT NVL2(null,1,-1) FROM dual;SELECT NULLIF(12,12) FROM dual;SELECT NULLIF(12,2) FROM dual;SELECT COALESCE(null,3,4,null) FROM dual;SELECT COALESCE(null,null,4,null) FROM dual;6. LOOP中的COMMIT/ROLLBACKDROP TABLE t_loop PURGE;create TABLE t_loop AS SELECT * FROM user_objects WHERE 1=2; SELECT * FROM t_loop;-- 逐行提交DECLAREBEGINFOR cur IN (SELECT * FROM user_objects) LOOPINSERT INTO t_loop VALUES cur;COMMIT;END LOOP;END;-- 模擬批量提交DECLAREv_count NUMBER;BEGINFOR cur IN (SELECT * FROM user_objects) LOOPINSERT INTO t_loop VALUES cur;v_count := v_count + 1;IF v_count >= 100 THENCOMMIT;END IF;END LOOP;COMMIT;END;-- 真正的批量提交DECLARECURSOR cur ISSELECT * FROM user_objects;TYPE rec IS TABLE OF user_objects%ROWTYPE;recs rec;BEGINOPEN cur;WHILE (TRUE) LOOPFETCH cur BULK COLLECTINTO recs LIMIT 100;-- forall 實現批量FORALL i IN 1 .. recs.COUNTINSERT INTO t_loop VALUES recs (i);COMMIT;EXIT WHEN cur%NOTFOUND;END LOOP;CLOSE cur;END;-- OLAP-- 小計合計SELECT CASEWHEN a.deptno IS NULL THEN'合計'WHEN a.deptno IS NOT NULL AND a.empno IS NULL THEN'小計'ELSE'' || a.deptnoEND deptno,a.empno,a.ename,SUM(a.sal) total_salFROM scott.emp aGROUP BY GROUPING SETS((a.deptno),(a.deptno, a.empno, a.ename),()); -- 分組排序SELECT a.deptno,a.empno,a.ename,a.sal,-- 可跳躍的rankrank() over(PARTITION BY a.deptno ORDER BY a.sal DESC) r1,-- 密集型rankdense_rank() over(PARTITION BY a.deptno ORDER BY a.sal DESC) r2, -- 不分組排序rank() over(ORDER BY sal DESC) r3FROM scott.emp aORDER BY a.deptno,a.sal DESC;-- 當前行資料和前/後n行的資料比較SELECT a.empno,a.ename,a.sal,-- 上面一行lag(a.sal) over(ORDER BY a.sal DESC) lag_1,-- 下麵三行lead(a.sal, 3) over(ORDER BY a.sal DESC) lead_3FROM scott.emp aORDER BY a.sal DESC;知識點1.學用dbms_random:取亂數的函數oracle中貌似沒有mssql中的rand()直接取亂數的函數。