仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1200|回复: 8
打印 上一主题 下一主题

[学习教程] 在Sql Server中完成分组排名

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:07:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
BDB源自BerkeleyDB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性好比我们有如许一个表,表名是table1,这个内外面存储了某班同砚中考一切的科目成就,假定以下:
姓名科目分数李四数学100李四语文85张三数学95张三语文90
这时候候,先生请求查出每一个科目同砚的成就排名,排名函数之前我们用的最多的就是row_number()over()了。但在默许情形下,这个排名函数是不分科目标,也就是不分组的,它会把一切的成就依照高或低举行排名
select*,ROW_NUMBER()OVER(ORDERBY[分数]desc)asid
from[table1]ORDERBY[课程]


实行失掉的查询了局以下:
姓名科目分数排名李四数学1001张三数学952张三语文903李四语文854
这并非我们想要的了局,由于数学和语文在一同排名是没有任何意义的。要完成每一个科目内的排名,我们就要在row_number()over()顶用到PARTITIONBY关头字了,PARTITIONBY的感化就是依据指定的某个列对了局集先辈行分组,再排名,好比我们这个例子中必要对课程举行分组,那末就是PARTITIONBY[课程],全体的sql以下:
select*,ROW_NUMBER()OVER(PARTITIONBY[课程]ORDERBY[分数]desc)asid
from[table1]ORDERBY[课程]

实行失掉的查询了局以下:
姓名科目分数排名李四数学1001张三数学952张三语文901李四语文852
这个就是我们想要的了局了。根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。
沙发
发表于 2015-1-18 11:57:44 | 只看该作者
从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。
小女巫 该用户已被删除
板凳
发表于 2015-1-26 13:13:34 | 只看该作者
原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。
乐观 该用户已被删除
地板
发表于 2015-2-4 19:59:30 | 只看该作者
可以动态传入参数,省却了动态SQL的拼写。
小魔女 该用户已被删除
5#
发表于 2015-2-10 06:23:46 | 只看该作者
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
若天明 该用户已被删除
6#
发表于 2015-3-1 01:26:39 | 只看该作者
大侠们有推荐的书籍和学习方法写下吧。
谁可相欹 该用户已被删除
7#
发表于 2015-3-10 12:26:51 | 只看该作者
如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。
愤怒的大鸟 该用户已被删除
8#
发表于 2015-3-17 07:09:51 | 只看该作者
习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。
精灵巫婆 该用户已被删除
9#
发表于 2015-3-24 02:06:33 | 只看该作者
你可以简单地认为适合的就是好,不适合就是不好。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:49

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表