博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
知方可补不足~row_number,rank,dense_rank,ntile排名函数的用法
阅读量:6186 次
发布时间:2019-06-21

本文共 1371 字,大约阅读时间需要 4 分钟。

这篇文章介绍SQL中4个很有意思的函数,我称它的行标函数,它们是row_number,rank,dense_rank和ntile,下面分别进行介绍。

一  row_number:它为数据表加一个叫“行标示”的列,它在数据表中是连续的,我们必须按着某个顺序把表排序之后,才能使用row_number,看下列例子:

SELECT   row_number() OVER ( ORDER BY SalePrice ) AS row ,                    *          FROM      Product

结果表被加上了行号:

这个row_number在平常用的最多,它可以用来实现数据表的分页功能,看下面代码

SELECT * FROM   ( SELECT    row_number() OVER ( ORDER BY SalePrice ) AS row ,                    *          FROM      Product        ) AS Result WHERE  Result.row BETWEEN 1 AND 2

它的含义是从第一条记录开始,取出2条记录,如果你想一页显示10条记录,可以使用BETWEEN 1 AND 10,如果想得到第二次的10条,那条件就变成BETWEEN 11 AND 20

二   rank:类型于row_number,不同之处在于,它会对order by 的字段进行处理,如果这个字段值相同,那么,行号保持不变,如代码:

SELECT RANK() OVER ( ORDER BY SalePrice ) AS row ,        SalePrice ,        ProductID ,        ProductName FROM   Product

结果如下:

三   dense_rank:与rank类型,不同之处在于行号是否保留一个位置,rank对保留这个位置,即上面图中,row的值由1直接变为3,因为它的1出现了两次,所以为2保留了一个位置,而dense_rank不会保留2这个位置,即实现的行号2其实是排在了第3位,如代码:

SELECT DENSE_RANK() OVER ( ORDER BY SalePrice ) AS row ,        SalePrice ,        ProductID ,        ProductName FROM   Product

结果如下:

四   ntile:为装桶操作,ntile(桶数)它在运行之前,先确定产生的桶数,然后根据桶数去生成行标,如代码:

SELECT NTILE(1) OVER ( ORDER BY SalePrice ) AS ntile ,        SalePrice ,        ProductID ,        ProductName FROM   Product

结果如下:

如果设为NTILE(3),那结果就为:

当我们面对一个复杂的问题时,考验的不是你是否能解决,而是你采取哪种方式去解决以及代码的性能问题。

 

转载于:https://www.cnblogs.com/lori/p/3340719.html

你可能感兴趣的文章
sed
查看>>
LVS的基本应用和LVS的NAT模型的配置
查看>>
linux下如何使用sftp命令
查看>>
MySQL的多表设计
查看>>
php编译
查看>>
决心书
查看>>
【转】获取OSGi任意Bundle的ClassLoader
查看>>
修改全局主题
查看>>
IPFS的十大应用机制
查看>>
Docker(一):Docker的使用教程
查看>>
奋笔提书
查看>>
PCanywhere/teamviewer/RDP/ultraVNC/tigerVNC/realVNC/Xmanager
查看>>
源码编译构建LAMP服务
查看>>
云计算面试题及答案,常见的Shell脚本面试题
查看>>
好程序员web前端教程分享JavaScript Math(算数)对象
查看>>
oracle 10g如何关闭和打开自动收集统计信息
查看>>
第二章--(第九单元)--vsftpd服务
查看>>
JQUERY失去焦点时验证多个表单
查看>>
2012.6.11
查看>>
判断本地是否存在Jquery文件,如果不存在则使用CDN加速的Jquery文件
查看>>