sql查询每个班上成绩最高的学生信息

  sql查询每个班上成绩最高的学生信息

数据库表和数据准备:

if exists (select * from sysobjects where id = OBJECT_ID('[classinfo]') and OBJECTPROPERTY(id, 'IsUserTable') = 1)
DROP TABLE [classinfo]

CREATE TABLE [classinfo] (
[id] [bigint]  NOT NULL,
[classID] [bigint]  NOT NULL,
[className] [nvarchar]  (50) NOT NULL,
[stat] [varchar]  (2) NOT NULL DEFAULT (1),
[autoid] [bigint]  IDENTITY (1, 1)  NOT NULL)

alter TABLE [classinfo] WITH NOCHECK ADD  CONSTRAINT [PK_classinfo] PRIMARY KEY  NONCLUSTERED ( [id] )
SET IDENTITY_INSERT [classinfo] ON

INSERT [classinfo] ([id],[classID],[className],[stat],[autoid]) VALUES ( 1,1,N'计算机一班',N'1',1)
INSERT [classinfo] ([id],[classID],[className],[stat],[autoid]) VALUES ( 2,2,N'计算机二班',N'1',2)
INSERT [classinfo] ([id],[classID],[className],[stat],[autoid]) VALUES ( 4,3,N'计算机三班',N'0',3)
INSERT [classinfo] ([id],[classID],[className],[stat],[autoid]) VALUES ( 5,4,N'计算机四班',N'1',4)
INSERT [classinfo] ([id],[classID],[className],[stat],[autoid]) VALUES ( 6,5,N'计算机五班',N'1',6)

SET IDENTITY_INSERT [classinfo] OFF

if exists (select * from sysobjects where id = OBJECT_ID('[stuinfo]') and OBJECTPROPERTY(id, 'IsUserTable') = 1)
DROP TABLE [stuinfo]

CREATE TABLE [stuinfo] (
[id] [bigint]  IDENTITY (1, 1)  NOT NULL,
[username] [nvarchar]  (50) NULL,
[userpwd] [nvarchar]  (50) NULL,
[classID] [bigint]  NULL,
[score] [numeric]  (10,2) NULL,
[age] [int]  NULL,
[CreateTime] [datetime]  NULL DEFAULT (getdate()))

alter TABLE [stuinfo] WITH NOCHECK ADD  CONSTRAINT [PK_stuinfo] PRIMARY KEY  NONCLUSTERED ( [id] )
SET IDENTITY_INSERT [stuinfo] ON

INSERT [stuinfo] ([id],[username],[userpwd],[classID],[score],[age],[CreateTime]) VALUES ( 1,N'001',N'0004',1,123.22,25,N'2012/8/24 10:58:10')
INSERT [stuinfo] ([id],[username],[userpwd],[classID],[score],[age],[CreateTime]) VALUES ( 2,N'002',N'154',2,888.00,21,N'2012/8/24 10:58:10')
INSERT [stuinfo] ([id],[username],[userpwd],[classID],[score],[age],[CreateTime]) VALUES ( 3,N'003',N'555',1,888.00,16,N'2012/8/24 10:58:10')
INSERT [stuinfo] ([id],[username],[userpwd],[classID],[score],[age],[CreateTime]) VALUES ( 4,N'004',N'644',2,85.60,18,N'2012/8/24 10:58:10')
INSERT [stuinfo] ([id],[username],[userpwd],[classID],[score],[age],[CreateTime]) VALUES ( 5,N'pkm',N'123',3,46.00,19,N'2012/8/24 10:58:10')
INSERT [stuinfo] ([id],[username],[userpwd],[classID],[score],[age],[CreateTime]) VALUES ( 6,N'pkm001',N'123',3,45.56,19,N'2012/8/24 10:58:10')
INSERT [stuinfo] ([id],[username],[classID],[CreateTime]) VALUES ( 7,N'2012pkm1',1,N'2012/8/24 10:58:10')

SET IDENTITY_INSERT [stuinfo] OFF

查询每班最高分数的sql语句:

select distinct si.id,si.username,si.score,si.classID,ci.className
from stuinfo as si
inner join
(
select max(score) as score ,classID from stuinfo
group by classID
)
as c1
on c1.score = si.score
inner join classinfo as ci
on ci.classID = si.classID
order by si.classID

原始数据:

查询结果:

 

 

附:删除重复username记录,只保留最小的id

delete from stuinfo
where id not in
(
select si.id
from stuinfo as si
inner join
(
select min(id) as id ,username from stuinfo
group by username
)
as c1
on c1.id = si.id
)
---或者
delete from stuinfo where id not in
(select min(id) from stuinfo group by username)

 

 

 

 

时间: 2024-12-30 12:47:56

sql查询每个班上成绩最高的学生信息的相关文章

sql查询出各科成绩最好的学生信息_MsSql

1.相关数据表 Score表  [User]表 SQL语句如下: 复制代码 代码如下: --查询出各科成绩最好的学生信息 --自连接 --SELECT TOP 1 * FROM Score B WHERE B.ScoreName = '数学' ORDER BY B.Score DESC SELECT A.ID,U.Name,A.ScoreName,A.Score FROM Score A,[User]U WHERE UID IN (SELECT TOP 1 UID FROM Score B WH

sql查询出各科成绩最好的学生信息

1.相关数据表 Score表   [User]表 SQL语句如下: 复制代码 代码如下: --查询出各科成绩最好的学生信息 --自连接 --SELECT TOP 1 * FROM Score B WHERE B.ScoreName = '数学' ORDER BY B.Score DESC SELECT A.ID,U.Name,A.ScoreName,A.Score FROM Score A,[User]U WHERE UID IN (SELECT TOP 1 UID FROM Score B W

随机抽取的sql语句 每班任意抽取3名学生_MsSql

学校有一.二.三....至十班. 假设每个班上有30名学生.张.李.刘.苏等 现有这样的表 student ,字段 class 及name .其中class 表示班级,name 表示每班学生姓名. 要求每班任意抽取3名学生出来,进行学校大扫除. 请写出这样的SQL语句. select name from (select (row_number() over (partition by class order by checksum(newid()))) id,* from student ) a

随机抽取的sql语句 每班任意抽取3名学生

学校有一.二.三....至十班. 假设每个班上有30名学生.张.李.刘.苏等 现有这样的表 student ,字段 class 及name .其中class 表示班级,name 表示每班学生姓名. 要求每班任意抽取3名学生出来,进行学校大扫除. 请写出这样的SQL语句. select name from (select (row_number() over (partition by class order by checksum(newid()))) id,* from student ) a

sql update-学生党 根据成绩表修改学生表“考试课程数”字段

问题描述 学生党 根据成绩表修改学生表"考试课程数"字段 需求:根据成绩表中的课程编号COURNO数据,统计考试课程数(一个学生要考几门课),并更新学生表"考试课程数"字段. 理想中学生表"考试课程数"字段中数据(从200001到200009)为: 1,1,2,0,1,1,1,0,0 自行尝试sql: update 学生 set 学生.考试课程数 = COUNT(成绩.学号STUNO) where (学生.学号STUNO = 成绩.学号STUNO

SQL查询当前数据上一条和下一条的记录

mssqlserver查询方法 其实我做了最简的就是如下写法  代码如下 复制代码 上一条记录的SQL语句: select top 1 * from news where newsid<id order by newsid DESC 下一条记录的SQL语句: select top 1 * from news where newsid>id order by newsid ASC 另一种写未能 id是指当前数据news_id参数 方法一:  代码如下 复制代码 string preSql = &

sql-数据库新手提问:SQL查询语句

问题描述 数据库新手提问:SQL查询语句 有3张表:学生表(学号,姓名,性别,年龄);课程表(课程号,课程名,学期):成绩表(学号,课程号,分数). 现在根据学号和学期查询某个同学的成绩信息:例如学号为001,学期是1的. 解决方案 select 学生表.姓名 课程表.课程 成绩表.分数 from 学生表,课程表, 成绩表 where 学生表.学号 = 成绩表.学号 and 课程表.课程号 = 成绩表.课程号 and 学生表.学号 = 001 and 课程表.学期 =1

数据库-sql查询结果重复问题 是否表结构设计问题

问题描述 sql查询结果重复问题 是否表结构设计问题 信息表a sid scope_type begin_date end_date 1 3 2 2 3 1 scope_type(1:按全部;2:按渠道;3:按机构) 范围表b tid sid channel org_id 1 1 1 null 2 1 3 null 3 1 101 1.两表通过sid关联,没有设外键, 2.新增记录时,先写表a,再写表b 3.当scope_type=1时,则只需a表新增1条记录. 当scope_type不为1时,

如何编写更好的SQL查询:终极指南(上)

结构化查询语言(SQL)是数据挖掘分析行业不可或缺的一项技能,总的来说,学习这个技能是比较容易的.对于SQL来说,编写查询语句只是第一步,确保查询语句高效并且适合于你的数据库操作工作,才是最重要的.这个教程将会提供给你一些步骤,来评估你的查询语句. 首先,应该了解学习SQL对于数据挖掘分析这个工作的重要性; 接下来,应该先学习SQL查询语句的处理和执行过程,以便可以更好的了解到,编写高质量的查询有多重要.具体说来就是,应该了解查询是如何被解析.重写.优化和最终评估的; 掌握了上面一点之后,你不仅