排序函数

资料来源:http://www.cnblogs.com/SkySoot/archive/2012/04/10/2441022.html


对查询结果进行排序并给出序号。大致分为以下三种情况:

1、【row_number】  对某张表进行排序,序号递增不重复。

序号示例:1、2、3、4、5、6、7、8、9……

2、【rank】  对某数据进行排序,得出名次,名次可以并列,但名次的序号跳空。

序号示例:1、2、2、4、5、5、5、8、9……

3、【dense_rank】  对某数据进行排序,得出名次,名次可以并列,但名次的序号连续递增。

序号示例:1、2、2、3、4、4、4、5、5……


基本语法:

排序函数:over([分组语句] 排序子句 [desc] [asc])

排序子句:order by col1,col2 

分组语句:partition by col1,col2


根据排序字句简单排序:

<span style="font-size:12px;">-- row_number 函数
-- 根据排序子句给出递增连续序号,按照名称排序的顺序递增
select s.id, s.name, cid, c.name, row_number() over(order by c.name) as number 
from student s, classes c where cid = c.id;
 
-- rank 函数函数 
-- 根据排序子句给出递增的序号,但是存在并列并且跳空 
-- 顺序递增
select id, name, rank() over(order by cid) as rank from student;
 
-- dense_rank 函数 
-- 根据排序子句给出递增的序号,但是存在并列不跳空 
select s.id, s.name, cid, c.name, dense_rank() over(order by c.name) as dense 
from student s, classes c where cid = c.id;</span>

示例:



根据分组语句及排序子句进行排序

<span style="font-size:12px;">-- partition by 分组子句 
-- 可以完成对分组的数据进行增加排序,partition by可以与以上三个函数联合使用。 
select s.id, s.name, cid, c.name, row_number() over(partition by c.name order by s.id) as rank 
from student s, classes c where cid = c.id;
 
select s.id, s.name, cid, c.name, rank() over(partition by c.name order by s.id) as rank 
from student s, classes c where cid = c.id;
 
select s.id, s.name, cid, c.name, dense_rank() over(partition by c.name order by s.id) as rank 
from student s, classes c where cid = c.id;</span>

示例:



平均分成若干组并进行排序

<span style="font-size:12px;">-- ntile 平均排序函数 
-- 将要排序的数据进行平分,然后按照等分排序。ntile中的参数代表分成多少等分。 
select s.id, s.name, cid, c.name, ntile(5) over(order by c.name) as ntile 
from student s, classes c where cid = c.id;</span>

示例:


备注:ntile(300)表示把按照bank_name排列后的数据平均分成300等分

1519/300=5.06

5*300=1500

1519-1500=19

因此,前19等分每份包含六个数据,从第20等分开始每等分包含5个数据





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值