• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > sqlserver巧用row_number和partition by分组取top数据

sqlserver巧用row_number和partition by分组取top数据

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了row_number,partition等相关知识,希望本文的分享对您有所帮助

SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单

分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系统中取出每个学科前3名的学生。这种查询在SQL Server 2005之前,写起来很繁琐,需要用到临时表关联查询才能取到。SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单。下面是一个简单示例:
代码如下:
--1.创建测试表
create table #score
(
name varchar(20),
subject varchar(20),
score int
)
--2.插入测试数据
insert into #score(name,subject,score) values('张三','语文',98)
insert into #score(name,subject,score) values('张三','数学',80)
insert into #score(name,subject,score) values('张三','英语',90)
insert into #score(name,subject,score) values('李四','语文',88)
insert into #score(name,subject,score) values('李四','数学',86)
insert into #score(name,subject,score) values('李四','英语',88)
insert into #score(name,subject,score) values('李明','语文',60)
insert into #score(name,subject,score) values('李明','数学',86)
insert into #score(name,subject,score) values('李明','英语',88)
insert into #score(name,subject,score) values('林风','语文',74)
insert into #score(name,subject,score) values('林风','数学',99)
insert into #score(name,subject,score) values('林风','英语',59)
insert into #score(name,subject,score) values('严明','英语',96)
--3.取每个学科的前3名数据
select * from
(
select subject,name,score,ROW_NUMBER() over(PARTITION by subject order by score desc) as num from #score
) T where T.num <= 3 order by subject
--4.删除临时表
truncate table #score
drop table #score

语法形式:ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2)
解释:根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解distinct 和 row_number()和over() 的区别
  • Oracle 分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法
  • ROW_NUMBER SQL Server 2005的LIMIT功能实现(ROW_NUMBER()排序函
  • Oracle row_number() over()解析函数高效实现分页_Oracle应用_脚
  • SqlServer2005中使用row_number()在一个查询中删除重复记录的方
  • sqlserver2005使用row_number() over分页的实现方法
  • sqlserver巧用row_number和partition by分组取top数据
  • SqlServer 2005中使用row_number()在一个查询中删除重复记录
  • SQLSERVER 2005的ROW_NUMBER、RANK、DENSE_RANK的用法
  • sqlserver 通用存储过程分页代码(附使用ROW_NUMBER()和不使用ROW

相关文章

  • 2018-12-05MySQL安全性指南 (1)(转)
  • 2018-12-05mysql group_concat()函数用法总结_MySQL
  • 2018-12-05mysql ndb集群备份数据库和还原数据库的方法
  • 2018-12-05mysql 字符集的系统变量说明
  • 2017-05-11php 读取mysql数据库三种方法
  • 2018-12-05MySQL中两种子查询的写法
  • 2017-05-11Mysql 开启Federated引擎的方法
  • 2018-12-05ROW_NUMBER SQL Server 2005的LIMIT功能实现(ROW_NUMBER()排序函
  • 2017-05-11mysql 月份查询该月有付款的数据
  • 2018-12-05 sql中的iif语句详解

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • Mysql+Tomcat建立Docker多容器连接的方法
    • 【MySQL 00】MySQL数据表
    • 浅谈sql语句优化
    • MySQL 用数字辅助表实现复杂的列变行
    • Mysql-各种锁区分与MVCC的详解
    • DBA_2PC_PENDING 介绍_Oracle应用_脚本之家
    • Centos中安装多个mysql数据的配置实例
    • mysql中SQL查询语句分类的示例详解
    • mysql数据库replace、regexp的用法
    • java实现插入mysql二进制文件,blob类型,遇到问题及解决办法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有