在线等,求关于sql总分的排名

linhua51 2014-09-10 03:06:40
rn 分数 姓名
1 8.0 王五
2 7.0 王五
3 4.0 王五
1 10.0 张三
2 9.0 张三
3 9.0 张三
4 8.0 张三
1 9.0 李四
以上的表的结构,想通过上面这张表想得到张三的3条记录的总分在所有客户最高分的3条记录的总分他的排名,,如果小于3条记录则不记录排名。求sql语句,谢谢
...全文
222 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lakerskobemvp 2014-09-10
  • 打赏
  • 举报
回复
楼上排名有问题,而且统计的分数不是最大的三个,如果分数顺序改一下,楼上的就有问题。借楼上改一下

with cte as
(
select *,row_number() over (partition by 姓名 order by 分数 desc)as rn1 from  tb1
 
)
select 姓名, sum(分数) as 分数,row_number() over ( order by  sum(分数) desc)as 名次 from cte 
where rn1<=3 and 姓名 in (select 姓名 from  tb1 group by 姓名 having count (*)>=3) group by 姓名
霜寒月冷 2014-09-10
  • 打赏
  • 举报
回复
引用
不是这个意思,我的意思的张三的最高的3条记录的分总,跟所有客户的三条记录总分比较,取出张三的名次。
if object_id('[tb1]') is not null drop table [tb1]
go
create table tb1 (rn int,  分数  numeric(4,2)  ,            姓名 varchar(10))
insert into tb1
select 1 ,8.0,'王五'union all
select 2 ,7.0,'王五'union all
select 3 ,4.0,'王五'union all
select 1 ,10.0 ,'张三'union all
select 2 ,9.0,'张三'union all
select 3 ,9.0,'张三'union all
select 4 ,8.0,'张三'union all
select 1 ,9.0,'李四'
go



with cte as
(
select *,row_number() over (partition by 姓名 order by  getdate())as rn1 from  tb1

)
select 姓名, sum(分数) as 分数,row_number() over ( order by  getdate())as 名次 from cte where rn1<=3 and 姓名 in (select 姓名 from  tb1 group by 姓名 having count (*)>=3) group by 姓名
 
--姓名	分数	名次
--王五	19.00	1
--张三	28.00	2
linhua51 2014-09-10
  • 打赏
  • 举报
回复
引用 2 楼 chz415767975 的回复:
是这个意思么
if object_id('[tb1]') is not null drop table [tb1]
go
create table tb1 (rn int,  分数  numeric(4,2)  ,            姓名 varchar(10))
insert into tb1
select 1 ,8.0,'王五'union all
select 2 ,7.0,'王五'union all
select 3 ,4.0,'王五'union all
select 1 ,10.0 ,'张三'union all
select 2 ,9.0,'张三'union all
select 3 ,9.0,'张三'union all
select 4 ,8.0,'张三'union all
select 1 ,9.0,'李四'
go

select 姓名,max(分数) from tb1 where 姓名 in (select 姓名 from  tb1 group by 姓名 having count (*)>=3) group by 姓名 

--姓名	(无列名)
--王五	8.00
--张三	10.00
不是这个意思,我的意思的张三的最高的3条记录的分总,跟所有客户的三条记录总分比较,取出张三的名次。
linhua51 2014-09-10
  • 打赏
  • 举报
回复
引用 1 楼 blandwolf 的回复:
张三明明4条记录啊,看不懂
张三4条记录取最高分的3条记录跟所以的客户比较排名
霜寒月冷 2014-09-10
  • 打赏
  • 举报
回复
是这个意思么
if object_id('[tb1]') is not null drop table [tb1]
go
create table tb1 (rn int,  分数  numeric(4,2)  ,            姓名 varchar(10))
insert into tb1
select 1 ,8.0,'王五'union all
select 2 ,7.0,'王五'union all
select 3 ,4.0,'王五'union all
select 1 ,10.0 ,'张三'union all
select 2 ,9.0,'张三'union all
select 3 ,9.0,'张三'union all
select 4 ,8.0,'张三'union all
select 1 ,9.0,'李四'
go

select 姓名,max(分数) from tb1 where 姓名 in (select 姓名 from  tb1 group by 姓名 having count (*)>=3) group by 姓名 

--姓名	(无列名)
--王五	8.00
--张三	10.00
向东流 2014-09-10
  • 打赏
  • 举报
回复
张三明明4条记录啊,看不懂

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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