SQL 2005新增的几个函数之学习
原文:SQL 2005新增的几个函数之学习
今天学习了sql server 2005新增的几个函数,分别是row_number(),rank,DENSE_RANK,ntile,下面以例子
分别简单讲解之
1.row_number
先来点数据,先建个表
SET NOCOUNT ON CREATE TABLE Person( FirstName VARCHAR(10), Age INT, Gender CHAR(1)) INSERT INTO Person VALUES ('Ted',23,'M') INSERT INTO Person VALUES ('John',40,'M') INSERT INTO Person VALUES ('George',6,'M') INSERT INTO Person VALUES ('Mary',11,'F') INSERT INTO Person VALUES ('Sam',17,'M') INSERT INTO Person VALUES ('Doris',6,'F') INSERT INTO Person VALUES ('Frank',38,'M') INSERT INTO Person VALUES ('Larry',5,'M') INSERT INTO Person VALUES ('Sue',29,'F') INSERT INTO Person VALUES ('Sherry',11,'F') INSERT INTO Person VALUES ('Marty',23,'F') 直接用例子说明问题
SELECT ROW_NUMBER() OVER (ORDER BY Age) AS [Row Number by Age], FirstName, Age FROM Person 出现的数据如下 Row Number by Age FirstName Age -------------------- ---------- ----------- 1 Larry 5 2 Doris 6 3 George 6 4 Mary 11 5 Sherry 11 6 Sam 17 7 Ted 23 8 Marty 23 9 Sue 29 10 Frank 38 11 John 40
可以观察到,是根据年龄升序排列了,并且row_number()是给出了序列号了,这个序列号被重命名为Row Number by Age,
如果不想按年龄排序,可以这样写 SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS [Row Number by Record Set], FirstName, Age FROM Person
另外一个例子 SELECT ROW_NUMBER() OVER (PARTITION BY Gender ORDER BY Age) AS [Partition by Gender],
FirstName, Age, Gender FROM Person
这里是按性别划分区间了,同一性别再按年龄来排序,输出结果如下
Partition by Gender FirstName Age Gender -------------------- ---------- ----------- ------ 1 Doris 6 F 2 Mary 11 F 3 Sherry 11 F 4 Sue 29 F 1 Larry 5 M 2 George 6 M 3 Sam 17 M 4 Ted 23 M 5 Marty 23 M 6 Frank 38 M 7 John 40 M
注意,姓名M开始,序号又从1,2,3开始了
2 RANK函数 先看例子 SELECT RANK() OVER (ORDER BY Age) AS [Rank by Age], FirstName, Age FROM Person
输出如下
Rank by Age FirstName Age -------------------- ---------- ----------- 1 Larry 5 2 Doris 6 2 George 6 4 Mary 11 4 Sherry 11 6 Sam 17 7 Ted 23 7 Marty 23 9 Sue 29 10 Frank 38 11 John 40
看到了么,同年岭的话,将有相同的顺序,顺序成1,2,2,4了 SELECT RANK() OVER (PARTITION BY Gender ORDER BY Age) AS [Partition by Gender],
FirstName, Age, Gender FROM Person输出为
Partition by Gender FirstName Age Gender -------------------- ---------- ----------- ------ 1 Doris 6 F 2 Mary 11 F 2 Sherry 11 F 4 Sue 29 F 1 Larry 5 M 2 George 6 M 3 Sam 17 M 4 Ted 23 M 4 Marty 23 M 6 Frank 38 M 7 John 40 M
可以看到,按性别分组了,每个性别分组里,继续是用了rank函数
3 DENSE_RANK 函数
SELECT DENSE_RANK() OVER (ORDER BY Age) AS [Dense Rank by Age],
FirstName,
Age
FROM Person
输出结果为
Dense Rank by Age FirstName Age
-------------------- ---------- -----------
1 Larry 5
2 Doris 6
2 George 6
3 Mary 11
3 Sherry 11
4 Sam 17
5 Ted 23
5 Marty 23
6 Sue 29
7 Frank 38
8 John 40
看到了么,和rank函数区别是,顺序始终是连续的,Doris 和George同年,都是排第2位,但之后的mary不象rank函数那样排第4,而是排第3位了
4 ntile函数
SELECT FirstName, Age, NTILE(3) OVER (ORDER BY Age) AS [Age Groups] FROM Person
输出
FirstName Age Age Groups ---------- ----------- -------------------- Larry 5 1 Doris 6 1 George 6 1 Mary 11 1 Sherry 11 2 Sam 17 2 Ted 23 2 Marty 23 2 Sue 29 3 Frank 38 3 John 40 3
这个函数按照ntile(n)中的N,把记录强制分成多少段,11条记录现在分成3段了,lary到mary是第1
段,sherry到maty是第2段,sue到john是第3段了
5 top n
declare @n int
set @n=10;
select top(@n) * from table1
转载于:https://www.cnblogs.com/yanglin/archive/2007/12/21/1009528.html
SQL 2005新增的几个函数之学习相关推荐
- sql 2005 新增的查看sql语句运行情况
SET STATISTICS IO on; SET STATISTICS TIME on; 转载于:https://www.cnblogs.com/ahjxxy/archive/2009/01/19/ ...
- SQL Server 2012新增的内置函数尝试
SQL Server 2012新增的内置函数尝试 简介 SQL Server2012新增了一些内置函数来让开发人员使用起来更加容易.可以减少代码量,下面我们将SQL Server新增的函数分为几类分别 ...
- SQL 2005中pivot and unpivot的用法
.Pivot的用法体会: 语句范例: select PN,[2006/5/30] as [20060530],[2006/6/2] as [20060602] from consumptiondata ...
- sql 2005 try catch
--删除卡的记录 delete from ObjTransportCard where CardId=@CardId --删除交易的记录 delete from ObjTransaction wher ...
- sql 2000與sql 2005互遷移的問題
sql2005导入导出存储过程 1. 可以用脚本备份 manger studio--右键你的数据库--任务--生成脚本 在脚本生成向导的"选择对象类型"步 ...
- sql server新增列_SQL Server 2017中的新增功能
sql server新增列 SQL Server 2017 is considered a major release in the history of the SQL Server life cy ...
- Spark SQL DataFrame新增一列的四种方法
Spark SQL DataFrame新增一列的四种方法 方法一:利用createDataFrame方法,新增列的过程包含在构建rdd和schema中 方法二:利用withColumn方法,新增列的过 ...
- Oracle SQL 行转列,pivot函数和unpivot函数
转:Oracle行转列,pivot函数和unpivot函数 - waynelo - 博客园 (cnblogs.com) pivot函数:行转列函数: 语法:pivot(任一聚合函数 for 需专列的值 ...
- sql 2005基础语法总结
sql 2005基础语法总结 目录 基础查询... 4 Select语句查询.... 4 1.查询单列数据... 4 2查询所用列数据... 4 3.查询指定的列数据... 4 4.在查询时使用别名. ...
最新文章
- vim graphics
- bootstrap 导航学习
- Android 动态修改参数配置
- 为什么有些xpath绝对路径拿不到数据_Python爬虫,登陆神器Selenium之xpath的使用
- python封装exe如何返回上一步_如何将python脚本封装成exe程序?
- docker wsl2启动不了_在window上安装docker的方法
- BeyondCompare3提示许可密钥过期完美解决方法:3281-0350
- 一个Linux中用于监控的简易shell脚本
- firefox 插件可能用得上的Firefox插件及下载
- python控制鼠标_Python直接控制鼠标键盘模块 pyautogui
- 【安全】Web渗透测试(全流程)
- 如何切图PS切图&网页切图
- 声网Agora 孙雨润:下一代实时传输体系结构的升级与应用
- 自学单片机入门学习建议
- 华为荣耀7i刷linux,华为荣耀7i(ATH-AL00 全网通)ROOT教程,简单几步完成ROOT
- 编程程序_PLC编程代码PLC程序设计公司
- 家用台式电脑计算机上的硬磁盘,台式电脑如何连接硬盘
- 罗克韦尔AB PLC ControlLogix PLC的介绍和选型
- python是高级语言还是机器语言_02_python是一种什么语言?
- linux多重引导工具,Linux多重引导器