分数名次问题

编程有钱人了 2011-09-07 05:32:16
一个表A

姓名 分数
张三 10
李四 20
王五 30


求如下效果
姓名 分数 名次
张三 10 1
李四 20 2
王五 30 3

用Sql 语句怎么实现
...全文
77 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子 2011-09-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wangjun8868 的回复:]
引用 1 楼 nbdba 的回复:

SQL code
select 姓名,分数,row_number() over (order by 分数) as 名次
from tab
order by 分数

sql2000数据库 这个函数 没有吧
[/Quote]
row_number是SQL SERVER 2005+才有的;
2000可以用临时表或是嵌套子查询!
chuanzhang5687 2011-09-07
  • 打赏
  • 举报
回复
+1[Quote=引用 8 楼 fredrickhu 的回复:]

SQL code
--示例数据
CREATE TABLE tb(Name varchar(10),Score decimal(10,2))
INSERT tb SELECT 'aa',99
UNION ALL SELECT 'bb',56
UNION ALL SELECT 'cc',56
UNION ALL SELECT 'dd',77
UNION ALL SELECT 'ee',78
UNI……
[/Quote]
--小F-- 2011-09-07
  • 打赏
  • 举报
回复
--示例数据
CREATE TABLE tb(Name varchar(10),Score decimal(10,2))
INSERT tb SELECT 'aa',99
UNION ALL SELECT 'bb',56
UNION ALL SELECT 'cc',56
UNION ALL SELECT 'dd',77
UNION ALL SELECT 'ee',78
UNION ALL SELECT 'ff',76
UNION ALL SELECT 'gg',78
UNION ALL SELECT 'ff',50
GO

--1. 名次生成方式1,Score重复时合并名次
SELECT *,Place=(SELECT COUNT(DISTINCT Score) FROM tb WHERE Score>=a.Score)
FROM tb a
ORDER BY Place
/*--结果
Name Score Place
---------------- ----------------- -----------
aa 99.00 1
ee 78.00 2
gg 78.00 2
dd 77.00 3
ff 76.00 4
bb 56.00 5
cc 56.00 5
ff 50.00 6
--*/



--2. 名次生成方式2,Score重复时保留名次空缺
SELECT *,Place=(SELECT COUNT(Score) FROM tb WHERE Score>a.Score)+1
FROM tb a
ORDER BY Place
/*--结果
Name Score Place
--------------- ----------------- -----------
aa 99.00 1
ee 78.00 2
gg 78.00 2
dd 77.00 4
ff 76.00 5
bb 56.00 6
cc 56.00 6
ff 50.00 8
--*/
jiemo587 2011-09-07
  • 打赏
  • 举报
回复

如果分数有重复的话,3楼的可能会有一些问题,用identity实现我觉得可以满足LZ的要求

select 姓名,分数
,名次= identity(int,1,1) into #1 from tab a
order by 分数,姓名

select * from #1
编程有钱人了 2011-09-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 nbdba 的回复:]

你没有说明同分如何排
你的排名很怪,分数低的排名小
[/Quote]
同分的话随即排()
编程有钱人了 2011-09-07
  • 打赏
  • 举报
回复
也有可能是
姓名 分数 名次
李四 20 2
张三 10 1
王五 30 3
顺序是乱得

但是名次 必须准确
NBDBA 2011-09-07
  • 打赏
  • 举报
回复
2000如下

select 姓名,分数
,名次= (select count(*) from tab where 分数 <= a.分数)
from tab a
order by 分数
NBDBA 2011-09-07
  • 打赏
  • 举报
回复
你没有说明同分如何排
你的排名很怪,分数低的排名小
编程有钱人了 2011-09-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nbdba 的回复:]

SQL code
select 姓名,分数,row_number() over (order by 分数) as 名次
from tab
order by 分数
[/Quote]
sql2000数据库 这个函数 没有吧
NBDBA 2011-09-07
  • 打赏
  • 举报
回复
select 姓名,分数,row_number() over (order by 分数) as 名次
from tab
order by 分数

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧