每一个班级中每一门课程获得最高分的学生的学号
2013-10-18 22:16
274 查看
学生(学号,姓名,班级代号)
课程(课程号,课程名称,学分数)
成绩(学号,课程号,成绩)
CREATE TABLE [dbo].[Class](
[ClassID] [int] NULL,
[ClassName] [nvarchar](10) NULL
) ON [PRIMARY]
1 一班
2 二班
3 三班
CREATE TABLE [dbo].[Student](
[StudentID] [nvarchar](10) NULL,
[StudentName] [nvarchar](50) NULL,
[ClassID] [int] NULL
) ON [PRIMARY]
2009001 小宋 1
2009002 小李 1
2009003 小王 2
2009004 小张 2
2009005 小孙 3
2009006 小雪 3
CREATE TABLE [dbo].[Score](
[ID] [int] NOT NULL,
[Score] [int] NULL,
[Subject] [nvarchar](10) NULL,
[StudentID] [nvarchar](10) NULL
) ON [PRIMARY]
1 20 数学 2009001
2 21 数学 2009002
3 6 数学 2009003
4 2 数学 2009004
5 8 数学 2009005
6 45 数学 2009006
7 68 语文 2009001
8 72 语文 2009002
9 35 语文 2009003
10 15 语文 2009004
11 85 语文 2009005
12 21 语文 2009006
13 22 科学 2009001
14 56 科学 2009002
15 54 科学 2009003
16 21 科学 2009004
17 35 科学 2009005
18 25 科学 2009006
方式一:
select t1.hscore,t1.subject,t1.classid,t2.classname,t3.studentid from
(select MAX(A.score) HScore,A.Subject,B.ClassID from Score A inner join Student b on A.StudentID =b.StudentID group by A.Subject,B.classid) t1
inner join Class t2
on t1.ClassID=t2.ClassID
inner join score t3 on t1.Subject=t3.Subject and t1.HScore=t3.Score
inner join Student t4 on t3.StudentID=t4.StudentID
order by t2.ClassName,t1.Subject
方式二:
SELECT * FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY b.subject, a.classid ORDER BY b.subject, a.classid, b.score DESC) AS RN
, b.subject, b.score,b.studentid, a.StudentName,a.classid
FROM Student a INNER JOIN score b ON a.StudentID = b.StudentID) A
WHERE RN = 1
课程(课程号,课程名称,学分数)
成绩(学号,课程号,成绩)
CREATE TABLE [dbo].[Class](
[ClassID] [int] NULL,
[ClassName] [nvarchar](10) NULL
) ON [PRIMARY]
1 一班
2 二班
3 三班
CREATE TABLE [dbo].[Student](
[StudentID] [nvarchar](10) NULL,
[StudentName] [nvarchar](50) NULL,
[ClassID] [int] NULL
) ON [PRIMARY]
2009001 小宋 1
2009002 小李 1
2009003 小王 2
2009004 小张 2
2009005 小孙 3
2009006 小雪 3
CREATE TABLE [dbo].[Score](
[ID] [int] NOT NULL,
[Score] [int] NULL,
[Subject] [nvarchar](10) NULL,
[StudentID] [nvarchar](10) NULL
) ON [PRIMARY]
1 20 数学 2009001
2 21 数学 2009002
3 6 数学 2009003
4 2 数学 2009004
5 8 数学 2009005
6 45 数学 2009006
7 68 语文 2009001
8 72 语文 2009002
9 35 语文 2009003
10 15 语文 2009004
11 85 语文 2009005
12 21 语文 2009006
13 22 科学 2009001
14 56 科学 2009002
15 54 科学 2009003
16 21 科学 2009004
17 35 科学 2009005
18 25 科学 2009006
方式一:
select t1.hscore,t1.subject,t1.classid,t2.classname,t3.studentid from
(select MAX(A.score) HScore,A.Subject,B.ClassID from Score A inner join Student b on A.StudentID =b.StudentID group by A.Subject,B.classid) t1
inner join Class t2
on t1.ClassID=t2.ClassID
inner join score t3 on t1.Subject=t3.Subject and t1.HScore=t3.Score
inner join Student t4 on t3.StudentID=t4.StudentID
order by t2.ClassName,t1.Subject
方式二:
SELECT * FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY b.subject, a.classid ORDER BY b.subject, a.classid, b.score DESC) AS RN
, b.subject, b.score,b.studentid, a.StudentName,a.classid
FROM Student a INNER JOIN score b ON a.StudentID = b.StudentID) A
WHERE RN = 1
相关文章推荐
- 例 9.7 有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)。
- 查询每门课程最高分的学生的学号,课程号,成绩
- 有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩。读入这10个学生的数据,要求输出3门课程的总平均成绩,以及个人平均分最高的学生的数据
- 习题 9.5 有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。
- 查询每名学生的学号、选修课程数目、总成绩、并将查询结果存放到生成的’学生选课统计表‘中
- 学生信息:输出第1,3,5个学生信息及分数最高的学生学号问题
- 假设有10位同学,各有3门课程的成绩。从键盘输入每位同学的学号、姓名和3门课程的成绩,然后把数据保存到磁盘文件,再将磁盘文件中的学生信息读入并显示
- sql查询每门课程成绩最高的学生
- 设计一个学生类,包含学号、姓名、课程、成绩,计算学生们的各科平均成绩,学生人数依输入而定
- (要求使用指针方法)一个班有四名学生,五门课。(1)求第一门课的平均分;(2)找出有两门以上课不及格的学生,输出他们的学号、全部课程成绩和平均成绩;(3)找出平均成绩在90分以上或全部课程成绩均在85
- 编写一个Java应用程序,该程序包括3个类:定义一个学生类,Student有姓名,学号,选学的课程列表 ,定义一个课程类:课程名称,课程分数
- 创建学生表,(sno,name,score,class),求每个班级中低于最高成绩的那些人
- 34. 有4个学生,每个学生有5门课程的成绩,输入任意学号,输出该学生的全部成绩(完成fun函数)。
- 假设某一班级有M名学生,没人考N门功课,试设计两个c++函数,(1)求第i个学生N门功课的平均分数。(2)求第j门课程的平均分数
- Java-第十四章-代参的方法(二)-编程实现,输入班里10名学生的身高,获得身高最高的学生要求对象数组类型方法
- a个学生,各b门课程,找出有不及格的课程的学生及其学号
- C语言课程设计. 根据学号等信息查询学生成绩
- 用二维数组,输出有一门以上课程未及格的学生,并打印出所有<60分的分数及各科成绩
- 输入3个学生的学号、姓名和三门功课成绩,输出平均分最高的同学
- 字符串数组 输入3个字符串,要求按由小到大的字母顺序输出; 输入n个学生的姓名和学号到字符串数组中,在输入一个姓名,如果班级有该生则返回其信息,否则返回本班无此人