sqlserver 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新增的几个函数之学习相关推荐

  1. sql 2005 新增的查看sql语句运行情况

    SET STATISTICS IO on; SET STATISTICS TIME on; 转载于:https://www.cnblogs.com/ahjxxy/archive/2009/01/19/ ...

  2. SQL Server 2012新增的内置函数尝试

    SQL Server 2012新增的内置函数尝试 简介 SQL Server2012新增了一些内置函数来让开发人员使用起来更加容易.可以减少代码量,下面我们将SQL Server新增的函数分为几类分别 ...

  3. SQL 2005中pivot and unpivot的用法

    .Pivot的用法体会: 语句范例: select PN,[2006/5/30] as [20060530],[2006/6/2] as [20060602] from consumptiondata ...

  4. sql 2005 try catch

    --删除卡的记录 delete from ObjTransportCard where CardId=@CardId --删除交易的记录 delete from ObjTransaction wher ...

  5. sql 2000與sql 2005互遷移的問題

    sql2005导入导出存储过程 1.   可以用脚本备份      manger   studio--右键你的数据库--任务--生成脚本     在脚本生成向导的"选择对象类型"步 ...

  6. sql server新增列_SQL Server 2017中的新增功能

    sql server新增列 SQL Server 2017 is considered a major release in the history of the SQL Server life cy ...

  7. Spark SQL DataFrame新增一列的四种方法

    Spark SQL DataFrame新增一列的四种方法 方法一:利用createDataFrame方法,新增列的过程包含在构建rdd和schema中 方法二:利用withColumn方法,新增列的过 ...

  8. Oracle SQL 行转列,pivot函数和unpivot函数

    转:Oracle行转列,pivot函数和unpivot函数 - waynelo - 博客园 (cnblogs.com) pivot函数:行转列函数: 语法:pivot(任一聚合函数 for 需专列的值 ...

  9. sql 2005基础语法总结

    sql 2005基础语法总结 目录 基础查询... 4 Select语句查询.... 4 1.查询单列数据... 4 2查询所用列数据... 4 3.查询指定的列数据... 4 4.在查询时使用别名. ...

最新文章

  1. vim graphics
  2. bootstrap 导航学习
  3. Android 动态修改参数配置
  4. 为什么有些xpath绝对路径拿不到数据_Python爬虫,登陆神器Selenium之xpath的使用
  5. python封装exe如何返回上一步_如何将python脚本封装成exe程序?
  6. docker wsl2启动不了_在window上安装docker的方法
  7. BeyondCompare3提示许可密钥过期完美解决方法:3281-0350
  8. 一个Linux中用于监控的简易shell脚本
  9. firefox 插件可能用得上的Firefox插件及下载
  10. python控制鼠标_Python直接控制鼠标键盘模块 pyautogui
  11. 【安全】Web渗透测试(全流程)
  12. 如何切图PS切图&网页切图
  13. 声网Agora 孙雨润:下一代实时传输体系结构的升级与应用
  14. 自学单片机入门学习建议
  15. 华为荣耀7i刷linux,华为荣耀7i(ATH-AL00 全网通)ROOT教程,简单几步完成ROOT
  16. 编程程序_PLC编程代码PLC程序设计公司
  17. 家用台式电脑计算机上的硬磁盘,台式电脑如何连接硬盘
  18. 罗克韦尔AB PLC ControlLogix PLC的介绍和选型
  19. python是高级语言还是机器语言_02_python是一种什么语言?
  20. linux多重引导工具,Linux多重引导器

热门文章

  1. 重构-改善既有代码的设计:简化函数调用 (八)
  2. 基于Lua脚本语言的嵌入式UART通信的实现
  3. golang网站错误处理
  4. golang中的strings.SplitAfter
  5. MOVW 和 rep
  6. 操作系统一:内核态的开销
  7. 前端一HTML:一: 浏览器,服务器,请求报文
  8. Django Logging
  9. Win10 UWP开发系列:解决Win10不同版本的Style差异导致的兼容性问题
  10. IBM copy service--flashcopy 实验