新人请教一个sql成绩排名的问题 求大手子帮忙解答一下

weixin_41989908 2018-04-12 10:12:45
我有两张表,一张是信息表一张是成绩表

信息(student)表的样子大概是这样
学号 姓名 班级 地区



成绩表(score)是这样的
编号 试卷名称 学号 score1 score2 score3 班级排名 地区排名



怎样写sql语句可以按照班级、地区分别排名并插入到 班级排名和地区排名两列中?
...全文
629 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwfxgm 2018-04-15
  • 打赏
  • 举报
回复
引用 6 楼 sinat_28984567 的回复:
--测试数据
if not object_id(N'Tempdb..#student') is null
    drop table #student
Go
Create table #student([学号] int,[姓名] nvarchar(22),[班级] nvarchar(22),[地区] nvarchar(22))
Insert #student
select 1,N'张三',N'1班',N'北京' union all
select 2,N'李四',N'1班',N'天津' union all
select 3,N'王五',N'2班',N'北京' union all
select 4,N'赵六',N'2班',N'天津'
GO
if not object_id(N'Tempdb..#score') is null
    drop table #score
Go
Create table #score([编号] int,[试卷名称] nvarchar(23),[学号] int,[score1] int,[score2] int,[score3] int,[班级排名] int,[地区排名] int)
Insert #score
select 1,N'名称1',1,10,20,30,0,0 union all
select 2,N'名称1',2,40,50,60,0,0 union all
select 3,N'名称1',3,40,20,60,0,0 union all
select 4,N'名称1',4,80,90,80,0,0
Go
--测试数据结束
--更新插入
UPDATE #score SET 班级排名=a.班级排名,地区排名=a.地区排名 FROM (
SELECT  #score.编号 ,
        #score.[试卷名称] ,
        #score.学号 ,
        #score.[score1] ,
        #score.[score2] ,
        #score.[score3] ,
        ROW_NUMBER() OVER ( PARTITION BY 班级 ORDER BY score1 + score2 + score3 DESC) AS 班级排名 ,
        ROW_NUMBER() OVER ( PARTITION BY 地区 ORDER BY score1 + score2 + score3 DESC) AS 地区排名
FROM    #student
        JOIN #score ON #score.学号 = #student.学号)a WHERE a.学号=#score.学号
--读取结果
SELECT * FROM #score
版主。你的服务真是周到。
二月十六 2018-04-13
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#student') is null
    drop table #student
Go
Create table #student([学号] int,[姓名] nvarchar(22),[班级] nvarchar(22),[地区] nvarchar(22))
Insert #student
select 1,N'张三',N'1班',N'北京' union all
select 2,N'李四',N'1班',N'天津' union all
select 3,N'王五',N'2班',N'北京' union all
select 4,N'赵六',N'2班',N'天津'
GO
if not object_id(N'Tempdb..#score') is null
    drop table #score
Go
Create table #score([编号] int,[试卷名称] nvarchar(23),[学号] int,[score1] int,[score2] int,[score3] int,[班级排名] int,[地区排名] int)
Insert #score
select 1,N'名称1',1,10,20,30,0,0 union all
select 2,N'名称1',2,40,50,60,0,0 union all
select 3,N'名称1',3,40,20,60,0,0 union all
select 4,N'名称1',4,80,90,80,0,0
Go
--测试数据结束
--更新插入
UPDATE #score SET 班级排名=a.班级排名,地区排名=a.地区排名 FROM (
SELECT  #score.编号 ,
        #score.[试卷名称] ,
        #score.学号 ,
        #score.[score1] ,
        #score.[score2] ,
        #score.[score3] ,
        ROW_NUMBER() OVER ( PARTITION BY 班级 ORDER BY score1 + score2 + score3 DESC) AS 班级排名 ,
        ROW_NUMBER() OVER ( PARTITION BY 地区 ORDER BY score1 + score2 + score3 DESC) AS 地区排名
FROM    #student
        JOIN #score ON #score.学号 = #student.学号)a WHERE a.学号=#score.学号
--读取结果
SELECT * FROM #score
二月十六 2018-04-13
  • 打赏
  • 举报
回复
引用 4 楼 weixin_41989908 的回复:
这样的话不是创建新的列吗?我是想将排名插入已有的列
都已经select出来了,更新到旧表中还不会写?
weixin_41989908 2018-04-13
  • 打赏
  • 举报
回复
引用 2 楼 sinat_28984567 的回复:
--测试数据
if not object_id(N'Tempdb..#student') is null
	drop table #student
Go
Create table #student([学号] int,[姓名] nvarchar(22),[班级] nvarchar(22),[地区] nvarchar(22))
Insert #student
select 1,N'张三',N'1班',N'北京' union all
select 2,N'李四',N'1班',N'天津' union all
select 3,N'王五',N'2班',N'北京' union all
select 4,N'赵六',N'2班',N'天津'
GO
if not object_id(N'Tempdb..#score') is null
	drop table #score
Go
Create table #score([编号] int,[试卷名称] nvarchar(23),[学号] int,[score1] int,[score2] int,[score3] int,[班级排名] int,[地区排名] int)
Insert #score
select 1,N'名称1',1,10,20,30,0,0 union all
select 2,N'名称1',2,40,50,60,0,0 union all
select 3,N'名称1',3,40,20,60,0,0 union all
select 4,N'名称1',4,80,90,80,0,0
Go
--测试数据结束
SELECT  #score.编号 ,
        #score.[试卷名称] ,
        #score.学号 ,
        #score.[score1] ,
        #score.[score2] ,
        #score.[score3] ,
        ROW_NUMBER() OVER ( PARTITION BY 班级 ORDER BY score1 + score2 + score3 DESC) AS 班级排名 ,
        ROW_NUMBER() OVER ( PARTITION BY 地区 ORDER BY score1 + score2 + score3 DESC) AS 地区排名
FROM    #student
        JOIN #score ON #score.学号 = #student.学号
这样的话不是创建新的列吗?我是想将排名插入已有的列
weixin_41989908 2018-04-13
  • 打赏
  • 举报
回复
引用 1 楼 ayalicer 的回复:
score1 score2 score3 加起来算吗
对的 算总分忘记说了还有总分字段
二月十六 2018-04-13
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#student') is null
drop table #student
Go
Create table #student([学号] int,[姓名] nvarchar(22),[班级] nvarchar(22),[地区] nvarchar(22))
Insert #student
select 1,N'张三',N'1班',N'北京' union all
select 2,N'李四',N'1班',N'天津' union all
select 3,N'王五',N'2班',N'北京' union all
select 4,N'赵六',N'2班',N'天津'
GO
if not object_id(N'Tempdb..#score') is null
drop table #score
Go
Create table #score([编号] int,[试卷名称] nvarchar(23),[学号] int,[score1] int,[score2] int,[score3] int,[班级排名] int,[地区排名] int)
Insert #score
select 1,N'名称1',1,10,20,30,0,0 union all
select 2,N'名称1',2,40,50,60,0,0 union all
select 3,N'名称1',3,40,20,60,0,0 union all
select 4,N'名称1',4,80,90,80,0,0
Go
--测试数据结束
SELECT #score.编号 ,
#score.[试卷名称] ,
#score.学号 ,
#score.[score1] ,
#score.[score2] ,
#score.[score3] ,
ROW_NUMBER() OVER ( PARTITION BY 班级 ORDER BY score1 + score2 + score3 DESC) AS 班级排名 ,
ROW_NUMBER() OVER ( PARTITION BY 地区 ORDER BY score1 + score2 + score3 DESC) AS 地区排名
FROM #student
JOIN #score ON #score.学号 = #student.学号


  • 打赏
  • 举报
回复
score1 score2 score3 加起来算吗
通过慢sql分析的学习,了解什么是慢sql,以及慢SQL会引起那些性能问题。清楚慢sql日志的设置,然后再通过慢sql分析工具的学习,清楚慢sql分析的步骤和流程。慢sql分析工具:mysqldumpslow工具、explain工具、profile工具、Optimizer Trace工具。 提供课程中所使用的sql语句。 课程内容:第一章:课程简介1、课程介绍2、课程大纲 第二章:慢sql简介1、慢sql简介2、慢sql会引起的问题 第三章:慢日志的设置1、慢sql的分析流程2、慢日志参数理解3、慢日志参数设置:第1种方式:my.ini文件设置4、慢日志参数设置:第2种方式:sql脚本设置5、慢日志参数设置-效果验证 第四章:如何发现慢sql1、如何发现慢sql:第1种方式:慢日志文件2、如何发现慢sql:第2种方式:mysql库的slow_log表 第五章:慢sql分析工具1、慢sql提取-mysqldumpslow工具-使用方法2、慢sql提取-mysqldumpslow工具-操作实战3、慢sql的执行计划分析-explain分析-执行计划结果说明4、慢sql的执行计划分析-explain分析-索引介绍+type类型举例5、慢sql的资源开销分析-profile分析-分析步骤6、慢sql的资源开销分析-profile分析-show profile执行阶段说明7、慢sql的资源开销分析-profile分析-完整列表说明+操作实战8、慢sql的跟踪分析-Optimizer Trace分析-分析步骤9、慢sql的跟踪分析-Optimizer Trace表的介绍10、索引失效场景举例 第六章:慢日志清理1、慢日志清理

27,579

社区成员

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

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