学生信息表:s(sno,sname,ssex,sdep,sclass)
课程信息表:c(cno,cname,teacher)
成绩表 :sc(sno,cno,grade)
怎样查询每门课分数最高的学生
查询结果中需显示三个字段 :学生姓名(sname),课程名(cname),成绩(grade)
求解呀 不知道有没好的看法呀
20 个解决方案
#1
select s.sname , c.cname , t.grade
from s , c , sc t
where s.sno = t.sno and t.cno = c.cno and t.grade = (select max(grade) from sc where cno = t.sno)
select s.sname , c.cname , t.grade
from s , c , sc t
where s.sno = t.sno and t.cno = c.cno and not exists (select 1 from sc where cno = t.sno and grade > t.grade)
如果上面没对.
不,懂;帮,顶;学,习;赚,分。
虽然这么回贴可能会被删除。
谁他妈的删除了就是个王八蛋。
强烈*****这种即当婊子又想立贞洁牌坊的恶劣行为!!!
有本事,就封杀我!!!
理由在这里:
他妈的一帮管理员有神经病啊???
http://topic.****.net/u/20110422/10/1a381057-7a7b-41d9-8969-ad1f5b77f24a.html?38665
最好给出完整的表结构,测试数据,计算方法和正确结果.否则耽搁的是你宝贵的时间。
如果有多表,表之间如何关联?
如何更有效地在SQL Server论坛上提问
http://topic.****.net/u/20100716/19/6f132f16-20e4-418c-8dee-b99d5f86d320.html?75910
[code=SQL]
#2
不是面试题都是这个吧。
#3
select a.sname,b.cname,max(c.grade)
from s a,c b,sc c
where a.sno=b.sno
and a.sno=c.sno
group by a.name,b.cname
#4
select a.sname , b.cname , c.grade
from s a , c b, sc c
where a.sno = c.sno and b.cno = c.cno and not exists (select 1 from sc c where cno = c.sno and grade > c.grade)
#5
select a.sname , b.cname , c.grade
from s a , c b, sc c
where a.sno = c.sno and b.cno = c.cno
and
not exists
(select 1 from sc c where cno = c.sno and grade > c.grade)
#6
/*
有三张表
学生信息表:s(sno,sname,ssex,sdep,sclass)
课程信息表:c(cno,cname,teacher)
成绩表 :sc(sno,cno,grade)
怎样查询每门课分数最高的学生
查询结果中需显示三个字段 :学生姓名(sname),课程名(cname),成绩(grade)
求解呀 不知道有没好的看法呀
*/
/*
说明:以下五十个语句都按照测试数据进行过测试,最好每次只单独运行一个语句。
问题及描述:
--1.学生表
Student(SNO,Sname,Sage,Ssex) --SNO 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
--2.课程表
Course(CNO,Cname,TNO) --CNO --课程编号,Cname 课程名称,TNO 教师编号
--3.教师表
Teacher(TNO,Tname) --TNO 教师编号,Tname 教师姓名
--4.成绩表
SC(SNO,CNO,score) --SNO 学生编号,CNO 课程编号,score 分数
*/
--创建测试数据
use CubeDemo;
go
SET NOCOUNT ON
/*学生表*/
if OBJECT_ID(N'Student',N'U') is not null drop table Student
go
create table Student(SNO varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10))
insert into Student values('01' , N'赵雷' , '1990-01-01' , N'男')
insert into Student values('02' , N'钱电' , '1990-12-21' , N'男')
insert into Student values('03' , N'孙风' , '1990-05-20' , N'男')
insert into Student values('04' , N'李云' , '1990-08-06' , N'男')
insert into Student values('05' , N'周梅' , '1991-12-01' , N'女')
insert into Student values('06' , N'吴兰' , '1992-03-01' , N'女')
insert into Student values('07' , N'郑竹' , '1989-07-01' , N'女')
insert into Student values('08' , N'王菊' , '1990-01-20' , N'女')
go
if OBJECT_ID(N'Course',N'U') is not null drop table Course
go
create table Course(CNO varchar(10),Cname nvarchar(10),TNO varchar(10))
insert into Course values('01' , N'语文' , '02')
insert into Course values('02' , N'数学' , '01')
insert into Course values('03' , N'英语' , '03')
go
if OBJECT_ID(N'Teacher',N'U') is not null drop table Teacher
go
create table Teacher(TNO varchar(10),Tname nvarchar(10))
insert into Teacher values('01' , N'张三')
insert into Teacher values('02' , N'李四')
insert into Teacher values('03' , N'王五')
go
if OBJECT_ID(N'SC',N'U') is not null drop table SC
go
create table SC(SNO varchar(10),CNO varchar(10),score decimal(18,1))
insert into SC values('01' , '01' , 80)
insert into SC values('01' , '02' , 90)
insert into SC values('01' , '03' , 99)
insert into SC values('02' , '01' , 70)
insert into SC values('02' , '02' , 60)
insert into SC values('02' , '03' , 80)
insert into SC values('03' , '01' , 80)
insert into SC values('03' , '02' , 80)
insert into SC values('03' , '03' , 80)
insert into SC values('04' , '01' , 50)
insert into SC values('04' , '02' , 30)
insert into SC values('04' , '03' , 20)
insert into SC values('05' , '01' , 76)
insert into SC values('05' , '02' , 87)
insert into SC values('06' , '01' , 31)
insert into SC values('06' , '03' , 34)
insert into SC values('07' , '02' , 89)
insert into SC values('07' , '03' , 98)
go
/*
怎样查询每门课分数最高的学生
查询结果中需显示三个字段 :学生姓名(sname),课程名(cname),成绩(grade)
*/
with cte as --查询分数最高的学生
(
select SNO,CNO,Score from (
select *,row_number() over(partition by CNO order by score desc) as num
from SC
) a where num=1
)
select student.Sname,Course.cname,cte.score from cte
left join Course on cte.CNO=Course.CNO
left join Student on cte.SNO=student.sno
有三张表
学生信息表:s(sno,sname,ssex,sdep,sclass)
课程信息表:c(cno,cname,teacher)
成绩表 :sc(sno,cno,grade)
怎样查询每门课分数最高的学生
查询结果中需显示三个字段 :学生姓名(sname),课程名(cname),成绩(grade)
求解呀 不知道有没好的看法呀
*/
/*
说明:以下五十个语句都按照测试数据进行过测试,最好每次只单独运行一个语句。
问题及描述:
--1.学生表
Student(SNO,Sname,Sage,Ssex) --SNO 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
--2.课程表
Course(CNO,Cname,TNO) --CNO --课程编号,Cname 课程名称,TNO 教师编号
--3.教师表
Teacher(TNO,Tname) --TNO 教师编号,Tname 教师姓名
--4.成绩表
SC(SNO,CNO,score) --SNO 学生编号,CNO 课程编号,score 分数
*/
--创建测试数据
use CubeDemo;
go
SET NOCOUNT ON
/*学生表*/
if OBJECT_ID(N'Student',N'U') is not null drop table Student
go
create table Student(SNO varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10))
insert into Student values('01' , N'赵雷' , '1990-01-01' , N'男')
insert into Student values('02' , N'钱电' , '1990-12-21' , N'男')
insert into Student values('03' , N'孙风' , '1990-05-20' , N'男')
insert into Student values('04' , N'李云' , '1990-08-06' , N'男')
insert into Student values('05' , N'周梅' , '1991-12-01' , N'女')
insert into Student values('06' , N'吴兰' , '1992-03-01' , N'女')
insert into Student values('07' , N'郑竹' , '1989-07-01' , N'女')
insert into Student values('08' , N'王菊' , '1990-01-20' , N'女')
go
if OBJECT_ID(N'Course',N'U') is not null drop table Course
go
create table Course(CNO varchar(10),Cname nvarchar(10),TNO varchar(10))
insert into Course values('01' , N'语文' , '02')
insert into Course values('02' , N'数学' , '01')
insert into Course values('03' , N'英语' , '03')
go
if OBJECT_ID(N'Teacher',N'U') is not null drop table Teacher
go
create table Teacher(TNO varchar(10),Tname nvarchar(10))
insert into Teacher values('01' , N'张三')
insert into Teacher values('02' , N'李四')
insert into Teacher values('03' , N'王五')
go
if OBJECT_ID(N'SC',N'U') is not null drop table SC
go
create table SC(SNO varchar(10),CNO varchar(10),score decimal(18,1))
insert into SC values('01' , '01' , 80)
insert into SC values('01' , '02' , 90)
insert into SC values('01' , '03' , 99)
insert into SC values('02' , '01' , 70)
insert into SC values('02' , '02' , 60)
insert into SC values('02' , '03' , 80)
insert into SC values('03' , '01' , 80)
insert into SC values('03' , '02' , 80)
insert into SC values('03' , '03' , 80)
insert into SC values('04' , '01' , 50)
insert into SC values('04' , '02' , 30)
insert into SC values('04' , '03' , 20)
insert into SC values('05' , '01' , 76)
insert into SC values('05' , '02' , 87)
insert into SC values('06' , '01' , 31)
insert into SC values('06' , '03' , 34)
insert into SC values('07' , '02' , 89)
insert into SC values('07' , '03' , 98)
go
/*
怎样查询每门课分数最高的学生
查询结果中需显示三个字段 :学生姓名(sname),课程名(cname),成绩(grade)
*/
with cte as --查询分数最高的学生
(
select SNO,CNO,Score from (
select *,row_number() over(partition by CNO order by score desc) as num
from SC
) a where num=1
)
select student.Sname,Course.cname,cte.score from cte
left join Course on cte.CNO=Course.CNO
left join Student on cte.SNO=student.sno
#7
你这个也可以的
#8
select
s.sname , c.cname , t.grade
from
s , c , sc t
where
s.sno = t.sno
and
t.cno = c.cno
and
t.grade = (select max(grade) from sc where cno = t.sno)
#9
with cte as --查询分数最高的学生
(
select SNO,CNO,Score from (
select *,row_number() over(partition by CNO order by score desc) as num
from SC
) a where num=1
)
select student.Sname,Course.cname,cte.score from cte
left join Course on cte.CNO=Course.CNO
left join Student on cte.SNO=student.sno
#10
谢谢上面各位的答案哈 很有帮助啊 这纯属个人问题不是啥面试问题
#11
把学生召集起来训话:
你们,各自把自己的总分报上来,大家比一下,看谁最高,不许瞎报!!!
结果就出来了...
你们,各自把自己的总分报上来,大家比一下,看谁最高,不许瞎报!!!
结果就出来了...
#12
老课题,学习学习
#13
上上面那位老兄想法好独特呀
#14
select s.sname,c.cname,max(sc.grade) from s,c,sc where s.sno=sc.sno and c.con=sc.cno
group by s.sname,c.cname
group by s.sname,c.cname
#15
select t.* from sc t where grade in
(select top 1 grade from sc where cno = t.cno order by grade desc)
order by t.cno , t.grade desc
查询每门课程最高成绩
学号,课程号,最高成绩
(select top 1 grade from sc where cno = t.cno order by grade desc)
order by t.cno , t.grade desc
查询每门课程最高成绩
学号,课程号,最高成绩
#16
select s.sname , c.cname , t.grade
from s , c , sc t
where
s.sno = t.sno
and t.cno = c.cno
and t.grade = (select max(grade) from sc where cno = t.sno)
我觉得这个应该能够达到效果
from s , c , sc t
where
s.sno = t.sno
and t.cno = c.cno
and t.grade = (select max(grade) from sc where cno = t.sno)
我觉得这个应该能够达到效果
#17
select
s.sname , c.cname , t.grade
from
s , c , sc t
where
s.sno = t.sno
and
t.cno = c.cno
and
t.grade = (select max(grade) from sc where cno = t.sno)
s.sname , c.cname , t.grade
from
s , c , sc t
where
s.sno = t.sno
and
t.cno = c.cno
and
t.grade = (select max(grade) from sc where cno = t.sno)
#18
我上面的楼兄的语句有错,我帮你调过来了。大体的思路是对的
#19
select
s.sname , c.cname , t.grade
from
s , c , sc t
where
s.sno = t.sno
and
t.cno = c.cno
and
t.grade in (select max(grade) from sc group by sno)
我晕死。这次才是正确的
s.sname , c.cname , t.grade
from
s , c , sc t
where
s.sno = t.sno
and
t.cno = c.cno
and
t.grade in (select max(grade) from sc group by sno)
我晕死。这次才是正确的
#20
楼上的不对
#21
#1
select s.sname , c.cname , t.grade
from s , c , sc t
where s.sno = t.sno and t.cno = c.cno and t.grade = (select max(grade) from sc where cno = t.sno)
select s.sname , c.cname , t.grade
from s , c , sc t
where s.sno = t.sno and t.cno = c.cno and not exists (select 1 from sc where cno = t.sno and grade > t.grade)
如果上面没对.
不,懂;帮,顶;学,习;赚,分。
虽然这么回贴可能会被删除。
谁他妈的删除了就是个王八蛋。
强烈*****这种即当婊子又想立贞洁牌坊的恶劣行为!!!
有本事,就封杀我!!!
理由在这里:
他妈的一帮管理员有神经病啊???
http://topic.****.net/u/20110422/10/1a381057-7a7b-41d9-8969-ad1f5b77f24a.html?38665
最好给出完整的表结构,测试数据,计算方法和正确结果.否则耽搁的是你宝贵的时间。
如果有多表,表之间如何关联?
如何更有效地在SQL Server论坛上提问
http://topic.****.net/u/20100716/19/6f132f16-20e4-418c-8dee-b99d5f86d320.html?75910
[code=SQL]
#2
不是面试题都是这个吧。
#3
select a.sname,b.cname,max(c.grade)
from s a,c b,sc c
where a.sno=b.sno
and a.sno=c.sno
group by a.name,b.cname
#4
select a.sname , b.cname , c.grade
from s a , c b, sc c
where a.sno = c.sno and b.cno = c.cno and not exists (select 1 from sc c where cno = c.sno and grade > c.grade)
#5
select a.sname , b.cname , c.grade
from s a , c b, sc c
where a.sno = c.sno and b.cno = c.cno
and
not exists
(select 1 from sc c where cno = c.sno and grade > c.grade)
#6
/*
有三张表
学生信息表:s(sno,sname,ssex,sdep,sclass)
课程信息表:c(cno,cname,teacher)
成绩表 :sc(sno,cno,grade)
怎样查询每门课分数最高的学生
查询结果中需显示三个字段 :学生姓名(sname),课程名(cname),成绩(grade)
求解呀 不知道有没好的看法呀
*/
/*
说明:以下五十个语句都按照测试数据进行过测试,最好每次只单独运行一个语句。
问题及描述:
--1.学生表
Student(SNO,Sname,Sage,Ssex) --SNO 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
--2.课程表
Course(CNO,Cname,TNO) --CNO --课程编号,Cname 课程名称,TNO 教师编号
--3.教师表
Teacher(TNO,Tname) --TNO 教师编号,Tname 教师姓名
--4.成绩表
SC(SNO,CNO,score) --SNO 学生编号,CNO 课程编号,score 分数
*/
--创建测试数据
use CubeDemo;
go
SET NOCOUNT ON
/*学生表*/
if OBJECT_ID(N'Student',N'U') is not null drop table Student
go
create table Student(SNO varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10))
insert into Student values('01' , N'赵雷' , '1990-01-01' , N'男')
insert into Student values('02' , N'钱电' , '1990-12-21' , N'男')
insert into Student values('03' , N'孙风' , '1990-05-20' , N'男')
insert into Student values('04' , N'李云' , '1990-08-06' , N'男')
insert into Student values('05' , N'周梅' , '1991-12-01' , N'女')
insert into Student values('06' , N'吴兰' , '1992-03-01' , N'女')
insert into Student values('07' , N'郑竹' , '1989-07-01' , N'女')
insert into Student values('08' , N'王菊' , '1990-01-20' , N'女')
go
if OBJECT_ID(N'Course',N'U') is not null drop table Course
go
create table Course(CNO varchar(10),Cname nvarchar(10),TNO varchar(10))
insert into Course values('01' , N'语文' , '02')
insert into Course values('02' , N'数学' , '01')
insert into Course values('03' , N'英语' , '03')
go
if OBJECT_ID(N'Teacher',N'U') is not null drop table Teacher
go
create table Teacher(TNO varchar(10),Tname nvarchar(10))
insert into Teacher values('01' , N'张三')
insert into Teacher values('02' , N'李四')
insert into Teacher values('03' , N'王五')
go
if OBJECT_ID(N'SC',N'U') is not null drop table SC
go
create table SC(SNO varchar(10),CNO varchar(10),score decimal(18,1))
insert into SC values('01' , '01' , 80)
insert into SC values('01' , '02' , 90)
insert into SC values('01' , '03' , 99)
insert into SC values('02' , '01' , 70)
insert into SC values('02' , '02' , 60)
insert into SC values('02' , '03' , 80)
insert into SC values('03' , '01' , 80)
insert into SC values('03' , '02' , 80)
insert into SC values('03' , '03' , 80)
insert into SC values('04' , '01' , 50)
insert into SC values('04' , '02' , 30)
insert into SC values('04' , '03' , 20)
insert into SC values('05' , '01' , 76)
insert into SC values('05' , '02' , 87)
insert into SC values('06' , '01' , 31)
insert into SC values('06' , '03' , 34)
insert into SC values('07' , '02' , 89)
insert into SC values('07' , '03' , 98)
go
/*
怎样查询每门课分数最高的学生
查询结果中需显示三个字段 :学生姓名(sname),课程名(cname),成绩(grade)
*/
with cte as --查询分数最高的学生
(
select SNO,CNO,Score from (
select *,row_number() over(partition by CNO order by score desc) as num
from SC
) a where num=1
)
select student.Sname,Course.cname,cte.score from cte
left join Course on cte.CNO=Course.CNO
left join Student on cte.SNO=student.sno
有三张表
学生信息表:s(sno,sname,ssex,sdep,sclass)
课程信息表:c(cno,cname,teacher)
成绩表 :sc(sno,cno,grade)
怎样查询每门课分数最高的学生
查询结果中需显示三个字段 :学生姓名(sname),课程名(cname),成绩(grade)
求解呀 不知道有没好的看法呀
*/
/*
说明:以下五十个语句都按照测试数据进行过测试,最好每次只单独运行一个语句。
问题及描述:
--1.学生表
Student(SNO,Sname,Sage,Ssex) --SNO 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
--2.课程表
Course(CNO,Cname,TNO) --CNO --课程编号,Cname 课程名称,TNO 教师编号
--3.教师表
Teacher(TNO,Tname) --TNO 教师编号,Tname 教师姓名
--4.成绩表
SC(SNO,CNO,score) --SNO 学生编号,CNO 课程编号,score 分数
*/
--创建测试数据
use CubeDemo;
go
SET NOCOUNT ON
/*学生表*/
if OBJECT_ID(N'Student',N'U') is not null drop table Student
go
create table Student(SNO varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10))
insert into Student values('01' , N'赵雷' , '1990-01-01' , N'男')
insert into Student values('02' , N'钱电' , '1990-12-21' , N'男')
insert into Student values('03' , N'孙风' , '1990-05-20' , N'男')
insert into Student values('04' , N'李云' , '1990-08-06' , N'男')
insert into Student values('05' , N'周梅' , '1991-12-01' , N'女')
insert into Student values('06' , N'吴兰' , '1992-03-01' , N'女')
insert into Student values('07' , N'郑竹' , '1989-07-01' , N'女')
insert into Student values('08' , N'王菊' , '1990-01-20' , N'女')
go
if OBJECT_ID(N'Course',N'U') is not null drop table Course
go
create table Course(CNO varchar(10),Cname nvarchar(10),TNO varchar(10))
insert into Course values('01' , N'语文' , '02')
insert into Course values('02' , N'数学' , '01')
insert into Course values('03' , N'英语' , '03')
go
if OBJECT_ID(N'Teacher',N'U') is not null drop table Teacher
go
create table Teacher(TNO varchar(10),Tname nvarchar(10))
insert into Teacher values('01' , N'张三')
insert into Teacher values('02' , N'李四')
insert into Teacher values('03' , N'王五')
go
if OBJECT_ID(N'SC',N'U') is not null drop table SC
go
create table SC(SNO varchar(10),CNO varchar(10),score decimal(18,1))
insert into SC values('01' , '01' , 80)
insert into SC values('01' , '02' , 90)
insert into SC values('01' , '03' , 99)
insert into SC values('02' , '01' , 70)
insert into SC values('02' , '02' , 60)
insert into SC values('02' , '03' , 80)
insert into SC values('03' , '01' , 80)
insert into SC values('03' , '02' , 80)
insert into SC values('03' , '03' , 80)
insert into SC values('04' , '01' , 50)
insert into SC values('04' , '02' , 30)
insert into SC values('04' , '03' , 20)
insert into SC values('05' , '01' , 76)
insert into SC values('05' , '02' , 87)
insert into SC values('06' , '01' , 31)
insert into SC values('06' , '03' , 34)
insert into SC values('07' , '02' , 89)
insert into SC values('07' , '03' , 98)
go
/*
怎样查询每门课分数最高的学生
查询结果中需显示三个字段 :学生姓名(sname),课程名(cname),成绩(grade)
*/
with cte as --查询分数最高的学生
(
select SNO,CNO,Score from (
select *,row_number() over(partition by CNO order by score desc) as num
from SC
) a where num=1
)
select student.Sname,Course.cname,cte.score from cte
left join Course on cte.CNO=Course.CNO
left join Student on cte.SNO=student.sno
#7
你这个也可以的
#8
select
s.sname , c.cname , t.grade
from
s , c , sc t
where
s.sno = t.sno
and
t.cno = c.cno
and
t.grade = (select max(grade) from sc where cno = t.sno)
#9
with cte as --查询分数最高的学生
(
select SNO,CNO,Score from (
select *,row_number() over(partition by CNO order by score desc) as num
from SC
) a where num=1
)
select student.Sname,Course.cname,cte.score from cte
left join Course on cte.CNO=Course.CNO
left join Student on cte.SNO=student.sno
#10
谢谢上面各位的答案哈 很有帮助啊 这纯属个人问题不是啥面试问题
#11
把学生召集起来训话:
你们,各自把自己的总分报上来,大家比一下,看谁最高,不许瞎报!!!
结果就出来了...
你们,各自把自己的总分报上来,大家比一下,看谁最高,不许瞎报!!!
结果就出来了...
#12
老课题,学习学习
#13
上上面那位老兄想法好独特呀
#14
select s.sname,c.cname,max(sc.grade) from s,c,sc where s.sno=sc.sno and c.con=sc.cno
group by s.sname,c.cname
group by s.sname,c.cname
#15
select t.* from sc t where grade in
(select top 1 grade from sc where cno = t.cno order by grade desc)
order by t.cno , t.grade desc
查询每门课程最高成绩
学号,课程号,最高成绩
(select top 1 grade from sc where cno = t.cno order by grade desc)
order by t.cno , t.grade desc
查询每门课程最高成绩
学号,课程号,最高成绩
#16
select s.sname , c.cname , t.grade
from s , c , sc t
where
s.sno = t.sno
and t.cno = c.cno
and t.grade = (select max(grade) from sc where cno = t.sno)
我觉得这个应该能够达到效果
from s , c , sc t
where
s.sno = t.sno
and t.cno = c.cno
and t.grade = (select max(grade) from sc where cno = t.sno)
我觉得这个应该能够达到效果
#17
select
s.sname , c.cname , t.grade
from
s , c , sc t
where
s.sno = t.sno
and
t.cno = c.cno
and
t.grade = (select max(grade) from sc where cno = t.sno)
s.sname , c.cname , t.grade
from
s , c , sc t
where
s.sno = t.sno
and
t.cno = c.cno
and
t.grade = (select max(grade) from sc where cno = t.sno)
#18
我上面的楼兄的语句有错,我帮你调过来了。大体的思路是对的
#19
select
s.sname , c.cname , t.grade
from
s , c , sc t
where
s.sno = t.sno
and
t.cno = c.cno
and
t.grade in (select max(grade) from sc group by sno)
我晕死。这次才是正确的
s.sname , c.cname , t.grade
from
s , c , sc t
where
s.sno = t.sno
and
t.cno = c.cno
and
t.grade in (select max(grade) from sc group by sno)
我晕死。这次才是正确的
#20
楼上的不对