用SQL计算名次
2016-05-22 23:31
501 查看
几天前在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按天进行分组查询最大值和最小值
- 数据存储-文件及数据库
- MySQL常见运算符
- ORACLE 非归档模式下REDO日志丢失修复
- MongoDB学习
- 数据库SQL优化大总结之 百万级数据库优化方案
- Django的API操作mysql中常用的语句
- Redis 集群部署
- 利用scrapy和MongoDB来开发一个爬虫
- redis lua 排它锁 公平信号量实践
- oracle数据库之入门级语句(DOS命令符)
- Redis3.2设置为开机启动
- 数据库主从不同步问题随笔
- 分析函数
- mysql分区(二)
- MYSQL分区表测试
- 用二进制包方式安装mysql实验
- MySQL调优
- 用源码方式安装mysql实验
- mysql在SBR下恢复误删除的表