oracleoracle 分析函数overr partition by 和group by的区别

--本文采用Oracle数据库测试,前4个查询为一组,后2个查询为一组,每组前面的查询是为了推出最后的查询
--创建表,为了简化处理,字段类型都采用varchar
create table tb_sc(
& uName varchar2(10),
& uCourse varchar2(10),
& uScore varchar2(10)
--插入数据
insert into tb_sc values('张三','语文','80');
insert into tb_sc values('张三','数学','95');
insert into tb_sc values('李四','语文','90');
insert into tb_sc values('李四','数学','70');
insert into tb_sc values('王五','语文','90');
insert into tb_sc values('王五','数学','90');
--查询所有结果如下
select * from tb_
--①查询每名学生的平均分(展示姓名、平均分)
select uName,avg(uScore) from tb_sc group by uN
--②查询每名学生的平均分并按降序排列(展示姓名、平均分)
select uName,avg(uScore) from tb_sc group by uName order by avg(uScore)
--③查询平均分数高于85分的学生(展示姓名、平均分)
select uName,avg(uScore) from tb_sc& group by uname having avg(uScore)&'85'& order by avg(uscore)
--④查询姓名不为张三且平均分数高于85分的学生(展示姓名、平均分)
select uName,avg(uScore) from tb_sc where uName!='张三' group by uname having avg(uScore)&'85'& order by avg(uscore)
--⑤查询所有学生的信息并将每个学生的各科成绩降序排列
select t.*,row_number() over(partition by t.uname order by t.uscore desc) rm from tb_
--⑥查询每个学生考得最好的科目并展示该科目的成绩
select * from (
select t.*,row_number() over(partition by t.uname order by t.uscore desc) rm from tb_sc t
) where rm=1;
注:&row_number() over(partition by 分组字段 order by 排序字段)&开窗函数通常用于查询所有分组并将各个窗体进行排序
本文已收录于以下专栏:
相关文章推荐
今天有个同事给我打电话问我题目列出的这个问题,在日常开发中,确实它们俩都是与分组有关的,但是需要注意的是一个是分组函数另一个是分析函数,讲解用到的表就以Oracle中schema的scott的EMP表...
今天有个同事给我打电话问我题目列出的这个问题,在日常开发中,确实它们俩都是与分组有关的,但是需要注意的是一个是分组函数另一个是分析函数,讲解用到的表就以Oracle中schema的scott的EMP表...
    你想要基于一种算法或者规则,把一个序列切分为两个或者多个子集。
    使用groupBy,partition,span,splitAt方法可以把一...
sql中的group by 和 having 用法解析
最近一直给项目组的开发人员进行SQL优化,发现他们对一些group by的高级都不是太会用。今天我就做几个测试,来演示rollup的用途。
      Oracle的GROUP BY语句除了最基本的语...
group by 用法解析
group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。
SELECT子句中的列名必须为分组列或列函数。列函数对于GROUP BY子...
http://blog.csdn.net/qbg/article/details/8648991
一、group by语法可以根据给定数据列的每个成员对查询结果进行分组统...
转自:/comment/3
group by 用法解析
group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到...
--sql中的group by 用法解析:
-- Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。
--它的作用是通过一定的规则将一个数据集划分成若...
group by 用法解析
group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。
SELECT子句中的列名必须为分组列或列函数。列函数对于GROUP BY子...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Oracle中rank() over, dense_rank(), row_number() 的区别_数据库技术_Linux公社-Linux系统门户网站
你好,游客
Oracle中rank() over, dense_rank(), row_number() 的区别
来源:Linux社区&
作者:zdp072
中rank() over, dense_rank(), row_number() 的区别
假设现在有一张学生表student,学生表中有姓名、分数、课程编号,现在我需要按照课程对学生的成绩进行排序。
select * from student
1. rank over ()可以实现对学生排名,特点是成绩相同的两名是并列,如下1 2 2 4 5
select name,& & &
course,& & &
rank() over(partition by course order by score desc) as rank&
2. dense_rank()和rank over()很像,但学生成绩并列后并不会空出并列所占的名次,如下1 2 2 3 4
select name,& & &
course,& & &
dense_rank() over(partition by course order by score desc) as rank&
3. row_number这个函数不需要考虑是否并列,那怕根据条件查询出来的数值相同也会进行连续排名
select name,& & &
course,& & &
row_number() over(partition by course order by score desc) as rank&
1. partition by用于给结果集进行分区。
2. partition by和group by有何区别?
partition by只是将原始数据进行名次排列(记录数不变)
group by是对原始数据进行聚合统计(记录数可能变少, 每组返回一条)
3. 使用rank over()的时候,空值是最大的,如果排序字段为null, 可能造成null字段排在最前面,影响排序结果。
可以这样: rank over(partition by course order by score desc nulls last)
更多Oracle相关信息见 专题页面
本文永久更新链接地址:
相关资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款OVER(PARTITION BY)函数介绍开窗函数&&&&&&&&&&&&&& Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。&&&&& 开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:1:over后的写法:&&&&&& over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数&& over(partition by deptno)按照部门分区&&& over(partition by deptno order by salary)&2:开窗的窗口范围:over(order by salary&range&between 5 preceding and 5 following):窗口范围为当前行数据幅度减5加5后的范围内的。举例:&--sum(s)over(order by s range between 2 preceding and 2 following)&表示加2或2的范围内的求和&select name,class,s, sum(s)over(order by s range between 2 preceding and 2 following) mm from t2adf&&&&&&& 3&&&&&&& 45&&&&&&& 45& --45加2减2即43到47,但是s在这个范围内只有45asdf&&&&&& 3&&&&&&& 55&&&&&&& 55cfe&&&&&&& 2&&&&&&& 74&&&&&&& 743dd&&&&&&& 3&&&&&&& 78&&&&&&& 158 --78在76到80范围内有78,80,求和得158fda&&&&&&& 1&&&&&&& 80&&&&&&& 158gds&&&&&&& 2&&&&&&& 92&&&&&&& 92ffd&&&&&&& 1&&&&&&& 95&&&&&&& 190dss&&&&&&& 1&&&&&&& 95&&&&&&& 190ddd&&&&&&& 3&&&&&&& 99&&&&&&& 198gf&&&&&&&& 3&&&&&&& 99&&&&&&& 198&&&over(order by salary&rows&between 5 preceding and 5 following):窗口范围为当前行前后各移动5行。举例:&--sum(s)over(order by s rows between 2 preceding and 2 following)表示在上下两行之间的范围内select name,class,s, sum(s)over(order by s rows between 2 preceding and 2 following) mm from t2adf&&&&&&& 3&&&&&&& 45&&&&&&& 174& (45+55+74=174)asdf&&&&&& 3&&&&&&& 55&&&&&&& 252&& (45+55+74+78=252)cfe&&&&&&& 2&&&&&&& 74&&&&&&& 332&&& (74+55+45+78+80=332)3dd&&&&&&& 3&&&&&&& 78&&&&&&& 379&&& (78+74+55+80+92=379)fda&&&&&&& 1&&&&&&& 80&&&&&&& 419gds&&&&&&& 2&&&&&&& 92&&&&&&& 440ffd&&&&&&& 1&&&&&&& 95&&&&&&& 461dss&&&&&&& 1&&&&&&& 95&&&&&&& 480ddd&&&&&&& 3&&&&&&& 99&&&&&&& 388gf&&&&&&&& 3&&&&&&& 99&&&&&&& 293&&over(order by salary&range&between unbounded preceding and unbounded following)或者over(order by salary&rows&between unbounded preceding and unbounded following):窗口不做限制&3、与over函数结合的几个函数介绍row_number()over()、rank()over()和dense_rank()over()函数的使用下面以班级成绩表t2来说明其应用t2表信息如下:cfe&&&&&&& 2&&&&&&& 74dss&&&&&&& 1&&&&&&& 95ffd&&&&&&& 1&&&&&&& 95fda&&&&&&& 1&&&&&&& 80gds&&&&&&& 2&&&&&&& 92gf&&&&&&&& 3&&&&&&& 99ddd&&&&&&& 3&&&&&&& 99adf&&&&&&& 3&&&&&&& 45asdf&&&&&& 3&&&&&&& 553dd&&&&&&& 3&&&&&&& 78select * from&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& (&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& select name,class,s,rank()over(partition by class order by s desc) mm from t2&&& )&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& where mm=1;得到的结果是:dss&&&&&&& 1&&&&&&& 95&&&&&&& 1ffd&&&&&&& 1&&&&&&& 95&&&&&&& 1gds&&&&&&& 2&&&&&&& 92&&&&&&& 1gf&&&&&&&& 3&&&&&&& 99&&&&&&& 1ddd&&&&&&& 3&&&&&&& 99&&&&&&& 1&注意:&&& 1.在求第一名成绩的时候,不能用row_number(),因为如果同班有两个并列第一,row_number()只返回一个结果;select * from&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& (&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& select name,class,s,row_number()over(partition by class order by s desc) mm from t2&&& )&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& where mm=1;1&&&&&&& 95&&&&&&& 1& --95有两名但是只显示一个2&&&&&&& 92&&&&&&& 13&&&&&&& 99&&&&&&& 1 --99有两名但也只显示一个&&& 2.rank()和dense_rank()可以将所有的都查找出来:如上可以看到采用rank可以将并列第一名的都查找出来;&&&& rank()和dense_rank()区别:&&&& --rank()是跳跃排序,有两个第二名时接下来就是第四名;select name,class,s,rank()over(partition by class order by s desc) mm from t2dss&&&&&&& 1&&&&&&& 95&&&&&&& 1ffd&&&&&&& 1&&&&&&& 95&&&&&&& 1fda&&&&&&& 1&&&&&&& 80&&&&&&& 3 --直接就跳到了第三gds&&&&&&& 2&&&&&&& 92&&&&&&& 1cfe&&&&&&& 2&&&&&&& 74&&&&&&& 2gf&&&&&&&& 3&&&&&&& 99&&&&&&& 1ddd&&&&&&& 3&&&&&&& 99&&&&&&& 13dd&&&&&&& 3&&&&&&& 78&&&&&&& 3asdf&&&&&& 3&&&&&&& 55&&&&&&& 4adf&&&&&&& 3&&&&&&& 45&&&&&&& 5&&&& --dense_rank()l是连续排序,有两个第二名时仍然跟着第三名select name,class,s,dense_rank()over(partition by class order by s desc) mm from t2dss&&&&&&& 1&&&&&&& 95&&&&&&& 1ffd&&&&&&& 1&&&&&&& 95&&&&&&& 1fda&&&&&&& 1&&&&&&& 80&&&&&&& 2 --连续排序(仍为2)gds&&&&&&& 2&&&&&&& 92&&&&&&& 1cfe&&&&&&& 2&&&&&&& 74&&&&&&& 2gf&&&&&&&& 3&&&&&&& 99&&&&&&& 1ddd&&&&&&& 3&&&&&&& 99&&&&&&& 13dd&&&&&&& 3&&&&&&& 78&&&&&&& 2asdf&&&&&& 3&&&&&&& 55&&&&&&& 3adf&&&&&&& 3&&&&&&& 45&&&&&&& 4--sum()over()的使用select name,class,s, sum(s)over(partition by class order by s desc) mm from t2 --根据班级进行分数求和dss&&&&&&& 1&&&&&&& 95&&&&&&& 190& --由于两个95都是第一名,所以累加时是两个第一名的相加ffd&&&&&&& 1&&&&&&& 95&&&&&&& 190&fda&&&&&&& 1&&&&&&& 80&&&&&&& 270& --第一名加上第二名的gds&&&&&&& 2&&&&&&& 92&&&&&&& 92cfe&&&&&&& 2&&&&&&& 74&&&&&&& 166gf&&&&&&&& 3&&&&&&& 99&&&&&&& 198ddd&&&&&&& 3&&&&&&& 99&&&&&&& 1983dd&&&&&&& 3&&&&&&& 78&&&&&&& 276asdf&&&&&& 3&&&&&&& 55&&&&&&& 331adf&&&&&&& 3&&&&&&& 45&&&&&&& 376first_value() over()和last_value() over()的使用 &--找出这三条电路每条电路的第一条记录类型和最后一条记录类型SELECT opr_id,res_type,&&&&&& first_value(res_type) over(PARTITION BY opr_id&ORDER BY res_type) low,&&&&&& last_value(res_type) over(PARTITION BY opr_id&ORDER BY res_type&rows BETWEEN unbounded preceding AND unbounded following) high& FROM rm_circuit_routeWHERE opr_id IN ('','','')&ORDER BY opr_&注:rows BETWEEN unbounded preceding AND unbounded following&的使用--取last_value时不使用rows BETWEEN unbounded preceding AND unbounded following的结果&SELECT opr_id,res_type,&&&&&& first_value(res_type) over(PARTITION BY opr_id ORDER BY res_type) low,&&&&&& last_value(res_type) over(PARTITION BY opr_id ORDER BY res_type) high& FROM rm_circuit_route&WHERE opr_id IN ('','','')&ORDER BY opr_如下图可以看到,如果不使用rows BETWEEN unbounded preceding AND unbounded following,取出的last_value由于与res_type进行进行排列,因此取出的电路的最后一行记录的类型就不是按照电路的范围提取了,而是以res_type为范围进行提取了。&&&&&在first_value和last_value中ignore nulls的使用数据如下:&&取出该电路的第一条记录,加上ignore nulls后,如果第一条是判断的那个字段是空的,则默认取下一条,结果如下所示:&&--lag() over()函数用法(取出前n行数据)lag(expresstion,&offset&,&default&)with a as&(select 1 id,'a' name from dual&union&select 2 id,'b' name from dual&union&select 3 id,'c' name from dual&union&select 4 id,'d' name from dual&union&select 5 id,'e' name from dual)&select id,name,lag(id,1,'')over(order by name)&--lead() over()函数用法(取出后N行数据)lead(expresstion,&offset&,&default&)with a as&(select 1 id,'a' name from dual&union&select 2 id,'b' name from dual&union&select 3 id,'c' name from dual&union&select 4 id,'d' name from dual&union&select 5 id,'e' name from dual)&select id,name,lead(id,1,'')over(order by name)&--ratio_to_report(a)函数用法 Ratio_to_report() 括号中就是分子,over() 括号中就是分母with a as (select 1 a from dual&&&&&&&&&& union allselect 1 a from dual&&&&&&&&&& union& allselect 1 a from dual&&&&&&&&&& union allselect 2 a from dual&&&&&&&&&& union all&select 3 a from dual&&&&&&&&&& union allselect 4 a from dual&&&&&&&&&& union allselect 4 a from dual&&&&&&&&&& union allselect 5 a from dual&&&&&&&&&& )select a,&ratio_to_report(a)over(partition by a)&b from a&&with a as (select 1 a from dual&&&&&&&&&& union allselect 1 a from dual&&&&&&&&&& union& allselect 1 a from dual&&&&&&&&&& union allselect 2 a from dual&&&&&&&&&& union all&select 3 a from dual&&&&&&&&&& union allselect 4 a from dual&&&&&&&&&& union allselect 4 a from dual&&&&&&&&&& union allselect 5 a from dual&&&&&&&&&& )select a,&ratio_to_report(a)over()&b from a&--分母缺省就是整个占比&with a as (select 1 a from dual&&&&&&&&&& union allselect 1 a from dual&&&&&&&&&& union& allselect 1 a from dual&&&&&&&&&& union allselect 2 a from dual&&&&&&&&&& union all&select 3 a from dual&&&&&&&&&& union allselect 4 a from dual&&&&&&&&&& union allselect 4 a from dual&&&&&&&&&& union allselect 5 a from dual&&&&&&&&&& )select a,&ratio_to_report(a)over() b from agroup by a&--分组后的占比&percent_rank用法计算方法:所在组排名序号-1除以该组所有的行数-1,如下所示自己计算的pr1与通过percent_rank函数得到的值是一样的:SELECT a.deptno,&&&&&& a.ename,&&&&&& a.sal,&&&&&& a.r,&&&&&& b.n,&&&&&& (a.r-1)/(n-1) pr1,&&&&&& percent_rank() over(PARTITION BY a.deptno ORDER BY a.sal) pr2& FROM (SELECT deptno,&&&&&&&&&&&&&& ename,&&&&&&&&&&&&&& sal,&&&&&&&&&&&&&& rank() over(PARTITION BY deptno ORDER BY sal) r --计算出在组中的排名序号&&&&&&&&& FROM emp&&&&&&&& ORDER BY deptno, sal) a,&&&&&& (SELECT deptno, COUNT(1) n FROM emp GROUP BY deptno) b --按部门计算每个部门的所有成员数&WHERE a.deptno = b.&cume_dist函数计算方法:所在组排名序号除以该组所有的行数,但是如果存在并列情况,则需加上并列的个数-1,&&&&&&&&& 如下所示自己计算的pr1与通过percent_rank函数得到的值是一样的:SELECT a.deptno,&&&&&& a.ename,&&&&&& a.sal,&&&&&& a.r,&&&&&& b.n,&&&&&& c.rn,&&&&&& (a.r + c.rn - 1) / n pr1,&&&&&& cume_dist() over(PARTITION BY a.deptno ORDER BY a.sal) pr2& FROM (SELECT deptno,&&&&&&&&&&&&&& ename,&&&&&&&&&&&&&& sal,&&&&&&&&&&&&&& rank() over(PARTITION BY deptno ORDER BY sal) r&&&&&&&&& FROM emp&&&&&&&& ORDER BY deptno, sal) a,&&&&&& (SELECT deptno, COUNT(1) n FROM emp GROUP BY deptno) b,&&&&&& (SELECT deptno, r, COUNT(1) rn,sal&&&&&&&&& FROM (SELECT deptno,sal,&&&&&&&&&&&&&&&&&&&&&& rank() over(PARTITION BY deptno ORDER BY sal) r&&&&&&&&&&&&&&&&& FROM emp)&&&&&&&& GROUP BY deptno, r,sal&&&&&&&& ORDER BY deptno) c --c表就是为了得到每个部门员工工资的一样的个数&WHERE a.deptno = b.deptno&& AND a.deptno = c.deptno(+)&& AND a.sal = c.&&percentile_cont函数含义:输入一个百分比(该百分比就是按照percent_rank函数计算的值),返回该百分比位置的平均值如下,输入百分比为0.7,因为0.7介于0.6和0.8之间,因此返回的结果就是0.6对应的sal的1500加上0.8对应的sal的1600平均SELECT ename,&&&&&& sal,&&&&&& deptno,&&&&&& percentile_cont(0.7) within GROUP(ORDER BY sal) over(PARTITION BY deptno) "Percentile_Cont",&&&&&& percent_rank() over(PARTITION BY deptno ORDER BY sal) "Percent_Rank"& FROM emp&WHERE deptno IN (30, 60);&若输入的百分比为0.6,则直接0.6对应的sal值,即1500SELECT ename,&&&&&& sal,&&&&&& deptno,&&&&&& percentile_cont(0.6) within GROUP(ORDER BY sal) over(PARTITION BY deptno) "Percentile_Cont",&&&&&& percent_rank() over(PARTITION BY deptno ORDER BY sal) "Percent_Rank"& FROM emp&WHERE deptno IN (30, 60);&PERCENTILE_DISC函数功能描述:返回一个与输入的分布百分比值相对应的数据值,分布百分比的计算方法见函数CUME_DIST,如果没有正好对应的数据值,就取大于该分布值的下一个值。注意:本函数与PERCENTILE_CONT的区别在找不到对应的分布值时返回的替代值的计算方法不同SAMPLE:下例中0.7的分布值在部门30中没有对应的Cume_Dist值,所以就取下一个分布值0.所对应的SALARY来替代SELECT ename,&&&&&& sal,&&&&&& deptno,&&&&&& percentile_disc(0.7) within GROUP(ORDER BY sal) over(PARTITION BY deptno) "Percentile_Disc",&&&&&& cume_dist() over(PARTITION BY deptno ORDER BY sal) "Cume_Dist"& FROM emp&WHERE deptno IN (30, 60);&来源:&&&&
阅读(...) 评论()oracle&partition&by与group&by&的区别--转载(/blo
SELECT b, c,
d,SUM(d) OVER(PARTITION
BY b,c ORDER BY d)
OVER(PARTITION
今天看到一个老兄的问题,
大概如下:
查询出部门的最低工资的userid 号
D号 工资 部门
userid salary dept
userid salary
有一个高人给出了一种答案:
SELECT MIN (salary) OVER (PARTITION
BY dept ) salary,
SELECT MIN (salary) OVER (PARTITION BY dept ) salary, dept
运行后得到:
楼主那位老兄一看觉得很高深。大叹真是高人阿~
我也觉得这位老兄实在是高啊。
但我仔细研究一下发现那位老兄对PARTITION BY的用法理解并不深刻。并没有解决楼主的问题。
大家请看我修改后的语句
userid,salary,dept,MIN
(salary) OVER (PARTITION BY dept ) salary
SELECT userid,salary,dept,MIN (salary) OVER (PARTITION BY dept ) salary
运行后的结果:
userid salary dept MIN (salary) OVER (PARTITION
3 500 2 500
salary dept
MIN (salary) OVER (PARTITION BY dept )
3 500 2 500
大家看出端倪了吧。
高深的未必适合。
一下是我给出的答案:
INNER JOIN
(SELECT MIN(SALARY) AS SALARY, DEPT FROM SS GROUP BY DEPT)
USING(SALARY,DEPT)
SELECT * FROM SS
INNER JOIN (SELECT MIN(SALARY) AS SALARY, DEPT FROM SS GROUP BY DEPT) SS2
USING(SALARY,DEPT)
运行后的结果:
salary dept userid
salary dept
由此我想到总结一下group by和partition by的用法
by是对检索结果的保留行进行单纯分组,一般总爱和聚合函数一块用例如AVG(),COUNT(),max(),main()等一块用。
partition by虽然也具有分组功能,但同时也具有其他的功能。
它属于oracle的分析用函数。
借用一个勤快人的数据说明一下:
sum() over (PARTITION BY ...) 是一个分析函数。 他执行的效果跟普通的sum ...group by
...不一样,它计算组中表达式的累积和,而不是简单的和。
表a,内容如下:
b,c,sum(d) e from a group by
b,c,sum(d)
而使用分析函数得到的结果是:
SELECT b, c, d,
OVER(PARTITION BY
b,c ORDER BY d) e FROM a
OVER(PARTITION
结果不一样,这样看还不是很清楚,我们把d的内容也显示出来就更清楚了:
02 01 2 2 d=2,sum(d)=2
02 01 5 7 d=5,sum(d)=7
02 01 23 30 d=23,sum(d)=30
02 02 1 1 c值不同,重新累计
02 02 12 13
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 oracle中的over函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信