- 浏览: 588210 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (263)
- Struts2 (3)
- Spring (15)
- Apache (11)
- Java (57)
- Hibernate (10)
- Oracle (19)
- Linux (27)
- MYSQL (2)
- JavaScript (15)
- WebService (4)
- XFire (4)
- FreeMarker (2)
- JXL (2)
- Eclipse (5)
- PowerDesigner (6)
- Intellij IDEA (7)
- JQuery (6)
- EL&JSTL (3)
- SpringMVC (7)
- JAR&TLD (1)
- CMD&BAT (1)
- CSS (2)
- axis (2)
- dom4j (1)
- SoapUI (1)
- HttpClient (2)
- FusionCharts (4)
- 百度地图Api进阶教程 (5)
- SQLSERVER (15)
- 网站安全 (1)
- CXF (3)
- 文件同步软件 (0)
- Maven (9)
- Solr (2)
- QRCode (1)
- JSON (1)
- Dubbo (6)
- log4j2 (1)
- MyBatis (4)
- JavaWeb (1)
- activiti (2)
- kettle (1)
- JVM调优 (9)
最新评论
-
_739677725:
4楼的兄弟 你有源码没有?如果有可不可以帮忙转发一份 邮箱: ...
JAVA线程根据给定URL生成网页快照 -
_739677725:
下载不了了
JAVA线程根据给定URL生成网页快照 -
rhyhhg5:
还有一些url,抓图片的时候会提示脚本错误什么的,什么情况?
JAVA线程根据给定URL生成网页快照 -
rhyhhg5:
为什么 给 有些url,就抓不了图片呢
JAVA线程根据给定URL生成网页快照 -
feng_tai_jun:
总结很好。
Java中获取类加载路径和项目根路径
聚合函数RANK 和 dense_rank 主要的功能是计算一组数值中的排序值。
在9i版本之前,只有分析功能(analytic ),即从一个查询结果中计算每一行的排序值,是基于order_by_clause子句中的value_exprs指定字段的。
其语法为:
RANK ( ) OVER ( [query_partition_clause] order_by_clause )
在9i版本新增加了合计功能(aggregate),即对给定的参数值在设定的排序查询中计算出其排序值。这些参数必须是常数或常值表达式,且必须和ORDER BY子句中的字段个数、位置、类型完全一致。
其语法为:
RANK ( expr [, expr]... ) WITHIN GROUP
( ORDER BY
expr [ DESC | ASC ] [NULLS { FIRST | LAST }]
[, expr [ DESC | ASC ] [NULLS { FIRST | LAST }]]...
)
实例解析如下:
先建了张测试表
SQL> select * from test_a;
ID PLAYNAME SCORE
-------------------- -------------------- ----------
01 aa 100
02 aa 101
02 bb 99
03 bb 98
04 aa 101
02 aa 101
需求是,将score降序排序,打印所有字段,并且如果是同一个playname的score只取出最高分,如果这个playname获得过多个相同的最高分,则只取出其中一个(比如:aa获得过3次101,则只取其中一个),最终要的结果就是:
RK ID PALYNAME SCORE
---------- -------------------- -------------------- ----------
1 02 aa 101
1 02 bb 99
本来我想用max函数,结果直接就出来了:
SQL> select max(score),palyname from test_a group by palyname;
MAX(SCORE) PALYNAME
---------- --------------------
101 aa
99 bb
但是要打印所有字段…OTL
即使用了嵌套,还是无法解决重复重现最高分的现象:
SQL> select distinct * from test_a t where score in (select max(score) from test_a group by palyname) order by score desc;
ID PALYNAME SCORE
-------------------- -------------------- ----------
02 aa 101
04 aa 101
02 bb 99
由于相同的playname对应的id不同,所以用distinct也无法过滤掉相同playname的并列最高分。
于是只好用rank()了
Rank的基本语法为:
RANK ( ) OVER ( [query_partition_clause] order_by_clause )
例子1:
TABLE:A (科目,分数)
数学,80
语文,70
数学,90
数学,60
数学,100
语文,88
语文,65
语文,77
现在我想要的结果是:(即想要每门科目的前3名的分数)
数学,100
数学,90
数学,80
语文,88
语文,77
语文,70
那么语句就这么写:
select * from (select rank() over(partition by 科目 order by 分数 desc) rk,a.* from a) t
where t.rk<=3;
以科目来分组,然后以分数来排序,给排序的结果分配rank,取前三名的rank
例子2:
有表Table内容如下
COL1 COL2
1 1
2 1
3 2
3 1
4 1
4 2
5 2
5 2
6 2
分析功能:列出Col2分组后根据Col1排序,并生成数字列。比较实用于在成绩表中查出各科前几名的信息。
SELECT a.*,RANK() OVER(PARTITION BY col2 ORDER BY col1) "Rank" FROM table a;
结果如下:
COL1 COL2 Rank
1 1 1
2 1 2
3 1 3
4 1 4
3 2 1
4 2 2
5 2 3
5 2 3
6 2 5
这个例子更直观一点,根据col2分组,根据clo1排序,我们可以发现:
5 2 3
5 2 3
6 2 5
即,如果两行记录完全相同,他们会被给予相同的rank,而排在它们之后的那行记录,由于前面的并列第3,使得之后的那条记录变成了第5,而如果我们在这里用的是dense_rank,那么之后的那条会变成第4
例子3:
合计功能:计算出数值(4,1)在Orade By Col1,Col2排序下的排序值,也就是col1=4,col2=1在排序以后的位置
SELECT RANK(4,1) WITHIN GROUP (ORDER BY col1,col2) "Rank" FROM table;
结果如下:
Rank
4
通过以上方法,得出col1为4,col2为1的那行数据的rank排名为多少
Dense_rank的例子:
dense_rank与rank()用法相当,但是有一个区别:dence_rank在并列关系是,相关等级不会跳过。rank则跳过
例如:表
A B C
a liu wang
a jin shu
a cai kai
b yang du
b lin ying
b yao cai
b yang 99
例如:当rank时为:
select m.a,m.b,m.c,rank() over(partition by a order by b) liu from test3 m
A B C LIU
a cai kai 1
a jin shu 2
a liu wang 3
b lin ying 1
b yang du 2
b yang 99 2
b yao cai 4
而如果用dense_rank时为:
select m.a,m.b,m.c,dense_rank() over(partition by a order by b) liu from test3 m
A B C LIU
a cai kai 1
a jin shu 2
a liu wang 3
b lin ying 1
b yang du 2
b yang 99 2
b yao cai 3
那么再回到之前的那个需求,
SQL> select distinct * from (select rank() over(partition by playname order by score desc,id) rk,t.* from test_a t) where rk=1;
RK ID PLAYNAME SCORE
---------- -------------------- -------------------- ----------
1 02 aa 101
1 02 bb 99
这里order by score desc,id 以score降序和id这两个字段排序,也就是说,正因为相同的playname对应的id不同,这样相同的playname,相同的score,但是不同的id,这样的2行数据就获得了不同的rank,而rk=1,即是只取rank=1,也就是最高分。这样就完成了需求。
发表评论
-
虚拟机上安装Oracle11gR2 PLSQL无法远程连接问题修复
2017-04-19 21:33 5351、关闭默认防火墙 systemctl stop fi ... -
oracle 小数格式化为百分数
2017-03-21 12:06 1680以下是从JAVAEYE中找到的代码,用途是将小数 转换为百分 ... -
SqlServer、Mysql和Oracle 添加修改删除字段
2015-10-14 14:04 538SqlServer(Transact-SQL): 添加单列 ... -
csv文件中的数据导入到oracle数据库中的方法
2015-07-13 14:16 1514当数据上百万条,使用PL/SQL中自带的导入工具,会很慢并 ... -
SSMA for Oracle 示例(Oracle数据迁移至SQLSERVER)
2015-03-26 13:39 1201参阅:http://blog.sina.com.cn/s/ ... -
JSP+Oracle实现简单的分页
2014-04-02 15:56 634oracle脚本:drop table t_student ... -
Oracle修改表空间为自动扩展
2014-02-12 15:42 701971.数据文件自动扩展的好处1)不会出现因为没有剩余空间可以 ... -
JDBC操纵Oracle数据库中的BLOB字段
2013-12-24 21:41 640... -
使用JDBC,Hibernate处理clob/blob字段
2013-12-24 21:35 9121、首先要知道的 (1)不同数据库中对应clob,blob ... -
ORACLE 多表关联 UPDATE 语句
2013-07-17 17:09 1023为了方便起见,建立了以下简单模型,和构造了部分测试数据:在某 ... -
创建Database Link (DBLink)
2012-07-31 09:55 905有时候,需要在两个Oracle数据库之间手工同步数据时,DBL ... -
批量将PowerDesigner中表字段由小写变成大写
2012-06-18 13:48 1399由于建表的时候木有注意,在生产SQL时pd在列名上都加了“”这 ... -
Oracle 序列
2012-06-07 13:15 975ORACLE没有象SQL SERVER中一 ... -
Oracle数据库索引
2011-12-31 14:42 1448索引是对数据库表中一列或多列的值进行排序的一种结构,使用索 ... -
Oracle 分析函数的使用
2011-12-08 15:04 773Oracle 分析函数使用介绍 分析函数是oracle81 ... -
Oracle 创建表空间和用户
2011-11-10 22:07 868Oracle安装完后,其中有一个缺省的数据库,除了这个缺省 ... -
oracle数据库文件中的导入\导出(imp/exp命令)
2010-07-30 15:38 1238Oracle数据导入导出imp/exp就相当于oracle ... -
用Pl*SQL将Excel中数据导入到oracle中
2010-07-30 14:39 2455(1)首先,可以不按照数据库中的字段存放顺序,编辑形成Exce ...
相关推荐
MS SQL 2005 四个排序函数ROW_NUMBER、RANK、DENSE_RANK 和 NTILE简介用法结果排名排序
本文主要是对Oracle分析函数Rank, Dense_rank, row_number的使用法,通过这些函数,我们可以对数据进行排序和分组,需要的朋友可以参考下。
分析函数ROW_NUMBER、RANK、DENSE_RANK的用法
排名函数是SQL Server2005新加的功能。在SQL Server2005中有如下四个排名函数row_number、rank、dense_rank和ntile,需要的朋友可以参考下。
hive中分组取topN、row_number、rank和dense_rank使用介绍
CVPR 2019挑战赛Dense_Haze_NTIRE19 浓雾去雾数据集,含55张雾图像与对应的Ground Truth。CVPR 2019挑战赛Dense_Haze_NTIRE19 浓雾去雾数据集,含55张雾图像与对应的Ground Truth。CVPR 2019挑战赛Dense_Haze_NTIRE...
排序用Rank, Dense_rank, row_number 1.带空值的排列 2.Top/Bottom N查询 3.First/Last排名查询 4.按层次查询 1.窗口函数简介 2.窗口函数示例-全统计 3.窗口函数进阶-滚动统计(累积/均值) 4.窗口函数进阶-根据时间...
分析函数2(Rank, Dense_rank, row_number);分析函数3(Top/Bottom N、First/Last、NTile);窗口函数;报表函数;分析函数总结;26个分析函数;PLSQL开发笔记和小结;分析函数简述 ROW_NUMBER () OVER([partition_clause]...
“rank()、dense_rank()和row_number()的区别”文章的date
主要介绍了sql四大排名函数之ROW_NUMBER、RANK、DENSE_RANK、NTILE使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
目录 Oracle开发专题之:分析函数(OVER) Oracle开发专题之:分析函数2(Rank, Dense_rank, row_number) Oracle开发专题之:分析函数3(Top/Bottom N、First/Last、NTile) Oracle开发专题之:窗口函数 ...
oracle分析函数,窗口函数,报表函数 分析函数(OVER) 分析函数2(Rank, Dense_rank, row_number) 分析函数3(Top/Bottom N、First/Last、NTile)
SQL Server 2005 引入几个新的排序(排名)函数,如ROW_NUMBER、RANK、DENSE_RANK等。这些新函数使您可以有效地分析数据以及向查询的结果行提供排序值。
Oracle 分析函数详解 1. 自动汇总函数rollup,cube, 2. rank 函数, rank,dense_rank,row_number 3. lag,lead函数 4. sum,avg,的移动增加,移动平均数 5. ratio_to_report报表处理函数 6. first,last取基数的分析函数
聚合函数可以是:sum,count,avg,max,min,first_value,last_value,rank,dense_rank ,row_number, ratio_to_report Over不能单独使用,用来制定数据窗口大小 Partition by表示分类数据集合,在此集合上的运算 Order by...
oracle 分析函数 rank dense_rank cube等
dense_rank ( ) over ([partition by col] order by col ) rownumber ( ) over ( [partition by col] order by col ) rank() 是排名的函数,该函数组内排序后会进行跳号,分数相同的作为并列。 dense_rank()
在oracle中,有rank,dense_rank,row_number,以及分组排名partition。 说明: rank:排名会出现并列第n名,它之后的会跳过空出的名次,例如:1,2,2,4 dense_rank:排名会出现并列第n名,它之后的名次为n+1,例如:1,2,...