用SQL计算名次
2005-03-16 17:38
232 查看
几天前在CSDN回答别人的问题: SQL怎样取得指定人的名次 ,现将结果招录下来。
一、测试数据:
二、名次按mypass排列,依次递增,mypass值相同时名次并列,即要求结果为:
需要使用临时表生成排序,使用以下语句:
三、名次依mypass排列,mypass值相同名次并列,但计算排名,即:
这个稍为简单,无需临时表:
一、测试数据:
select A.* into #tmp_Mark from ( select id=1, myname='小明', mypass=123 union select id=2, myname='小花', mypass=122 union select id=3, myname='小东', mypass=111 union select id=4, myname='小牛', mypass=122 ) A |
id | myname | mypass | OrderNo |
1 | 小明 | 123 | 1 |
2 | 小花 | 122 | 2 |
3 | 小牛 | 122 | 2 |
4 | 小东 | 111 | 3 |
select IDENTITY(int, 1,1) as OrderNo, mypass into #tmp_Order from #tmp_Mark group by mypass order by mypass desc --显示结果 select B.*, A.OrderNo from #tmp_Order A,#tmp_Mark B where A.mypass=B.mypass order by A.OrderNo --如果只要单独知道小花排序 select OrderNo from #tmp_Order A, #tmp_Mark B where A.mypass=B.mypass and B.myname='小花' |
id | mynam | mypass | OrderNo |
1 | 小明 | 123 | 1 |
2 | 小花 | 122 | 2 |
3 | 小牛 | 122 | 2 |
4 | 小东 | 111 | 4 |
select A.*,myOrder=(select count(*) from #tmp_Mark where mypass>a.mypass)+1 from #tmp_Mark A order by myOrder |
相关文章推荐
- 用SQL计算名次
- 《Microsoft SQL Server 2008 Analysis Services Step by Step》学习笔记六:创建高级度量和计算(下)
- sql时间转换与计算
- 如何计算某个sql语句所产生的redo和undo大小?
- Vertica用于时间计算的SQL语句大全
- Transact-SQL 计算工作日,不适用于oracle
- vertica时间计算SQL语句实例:统计一天内登录的用户
- 实现内容的时间交集计算的sql语句
- sql 计算地球2个坐标之间的距离
- SQL的计算字段(非表中的自然字段)
- MaxCompute SQL 2.0全新的计算引擎
- Sql计算两个日期之间的天数
- SQL中每一行的数据和上一行的数据进行计算
- SQL语句调优 - 统计信息的含义与作用及维护计算
- sql根据当前日期计算星期【原】
- 锋利的SQL2014:基于窗口的排名计算
- SQL计算出百分比
- sql 根据经纬度计算距离
- sql 数据库计算经纬度
- 如何计算某个sql语句所产生的redo和undo大小?