select a.*,rank()over(order by cj desc) pm
from(
(select 'a' name,1 cj
from dual
) union(
select 'b' name,1 cj
from dual
) union(
select 'c' name,2 cj
from dual
) union(
select 'd' name,3 cj
from dual
) union(
select 'e' name,3 cj
from dual
) union(
select 'f' name,4 cj
from dual
) union(
select 'g' name,0 cj
from dual
)
) a
order by pm
----------------------------------------------result---------
NAME CJ PM
f 4 1
d 3 2
e 3 2
c 2 4
a 1 5
b 1 5
g 0 7
----------------------------------------------------------------------------------------------------------
首先,要了解rank在英语的意思:等级.也就是说这是一个给数据确定等级的函数.
以销售为例,有地区,年,月,销售员,销售额,记录这五个字段.我们可以按地区,年,月,销售额对销售员进行排序,这样对销售员来说就相当于有一个等级概念了,第一名就是销售最高的......,如果我们要找出每个地区,年,月,销售额的前三名销售员.SQL如何写?
Sql代码
SELECT area_code, YEAR, MONTH, saleroom,saler
RANK () OVER (PARTITION BY area_code,year ,month ORDER BY area_code,year,month,saleroom ) RANK
FROM t_sale
Sql代码
SELECT
RANK(‘SHENZHEN‘,2007,5,50000) WITHIN GROUP
(ORDER BY area_code,year,month,saleroom) Rank
FROM T_SALE
上面这个SQL就可以搞定了.要注意的是,Rank()里的参数必须为常数,或常值表达式,里面参数的个数,类型也要和order by后字段的类型相对应.
上面就是Rank函数的两个用法.另外还有一个dense_rank(),它的用法和rank()一样,只是计算等级的方式不同.例如上面的
1,2,3,3,3,6.用dense_rank() 就是1,2,3,3,3,4.
其实现在Oracle对于rank和dense_rank已经支持合计功能,不过这次我仅仅使用了其分析功能。具体语法如下:RANK ( ) OVER ( [query_partition_clause] order_by_clause )。
下面给出一些来自网上的示例
TABLE:S (subject,mark)
数学,80
语文,70
数学,90
数学,60
数学,100
语文,88
语文,65
语文,77
现在我想要的结果是:每门科目的前3名的分数
数学,100
数学,90
数学,80
语文,88
语文,77
语文,70
那么语句就这么写
select * from (select rank() over(partition by subject order by mark desc) rk,S.* from S) T
where T.rk<=3;
dense_rank与rank()用法相当,但是有一个区别:dence_rank在处理相同的等级时,等级的数值不会跳过。rank则跳过。 row_number() 补充;
例如:表
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
而如果用row_number()时为
select m.a,m.b,m.c,row_number() 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 3
b yao cai 4
现在RANK 就是1,2,3,3,3,6,有了这个字段,就很容易得到前三名的销售员了.
(非原创,以前收藏在txt文档里的一篇文章,放在这里防止丢了,^_^)
分享到:
相关推荐
comp_gauss_dens_val there ı s somethı ng about thı s topı c
计算海水密度,具体用法请看函数页面,平台为matlab
计算海洋中海水密度,对于物理海洋学生很重要
可以对lammps输出RDF进行求和,然后平均得到某一条件下的均值
dens_labs 这只是我第八学期进行的所有数据加密和网络安全实验室的转储
W2DEN_APRS_Tracker是Teensy 3.1(PJRC)项目,将导致低成本,易于复制的APRS跟踪器,该接口可以连接到几乎所有无线电设备。 可以在Elsmer页面上的Sarasota紧急广播俱乐部的网站上找到构建详细信息。...
dens-pens
密度证书证书是DeNS树的节点和叶子。 它包含有关指向特定智能合约地址的信息,证书所有者可以检索和更新该地址。 证书也可以要求root代表所有者部署子证书(子域)。密度拍卖Vickrey拍卖系统用于根据根智能合约分配...
今天继续啃Tensorflow实战Google深度学习框架这本书,在250P的Seq2Seq模型代码理解时候有点困难,其中padded_batch(batch_size,padded_shapes)这个函数为最,本次仅为记录刨根问底的过程,也是...Like `Dataset.dens
该存储库使用Dens.TV作为源 这是盗版吗 好的,此存储库仅从其网站嵌入 这是非法的吗? Dunno,只想创建它,这个脚本使用了他们的网站安全性,也许他们会尽快解决 贡献 随意创建问题或创建请求请求 像这个回购? ...
% 用法:MLD=ra_mld(salt,temp,Z,dT) % % 先决条件:您必须已经安装了 SW Package 或者您必须有% 以下来自海水包的功能% sw_den.m ; sw_dens.m; sw_dens0.m; sw_seck.m; sw_smow.m % % 描述:此函数根据剖面数据确定...
CMAQv5.3.2包括对CMAQ集成源分配方法(ISAM)的重大更新,以及针对CMAQv5.3.1中确定的问题的多个次要修复程序。 新的CMAQ-ISAM版本包括对气相化学分配算法的实质性更新,从而改进了该方法的物理和数值方面。 强烈...
dense-graph的Python实现版,可创建有向图、无向图。 图内包括点的set、边的map、查询边是否存在、点是否存在、获取点/边的位置 点内包括点的key值、边的weight权重、点的value
xray_read_dens.m,因为该文件不包含实验中使用的某些人体组织的密度信息。 (这些可以在的在线NIST数据库中找到)。 您可以自由地将此代码用于教育目的,进行自己的实验或与其他方法进行比较。
要从CHGCAR提取电荷密度,使用和以下选项: python3 main.py -dens -full metal_data包含钠和铝的j数据和data势微扰数据 Si包含Si的VASP数据, C包含C的VASP数据。出于版权原因,不能包含POTCAR文件。 使用的伪...
一、定义材料号及特性 ...首先要定义EX和泊松比:MP,EX,MAT,…… MP,NUXY,MAT,…… 定义DP材料单元表(这里不考虑温度):TB,DP,MAT 进入单元表并编辑添加单元表:TBDATA,1,C TBDATA,2,ψ
分数 适用于JavaScript的BigInteger,Fraction和... FractionData从成分0和1之间,可以解码任何算术编码的数据中提取任意的数据。 BigInteger和Fraction类具有相似的方法。 以下划线开头的方法会更改原始数据。
该工具包含一些光场深度估计方法。 如何使用 运行main.m (此软件已在带有Windows 10 64位环境的Matlab 2016a上进行了测试) 参数data_type选择数据集。 data_type = 1新的基准数据集 Honauer, Katrin, Ole ...
TensorFlow2中的分布式RL 是一个使用实现各种流行的分布增强学习算法的存储库。 分布式RL是适用于随机环境的算法。 如果您想研究Distribution RL,则此存储库将是最佳选择。 dist-rl-tf2包含由领先的AI研究机构发布...
matlab求速度和加速度代码 不推荐使用此存储库,而推荐使用,这两个软件包都将安装一个gsw模块,该模块实际上应该与使用的模块相同。 但是,python-gsw是48项方程式的纯python,而GSW-Python是最新的72项方程式的c...