数据库如何实现这样的查询功能

比如:
create table T_Student(
Fson char(10) primary key,--学号
Fsname nvarchar(10) not null,--姓名
Fssex nchar(1) check(Fssex in('男','女')),--性别
Fsage int check(Fsage between 15 and 45),--年龄
Fsdept nvarchar(20) default '计算机系'--所在系
)
create table T_Course(
Fcno char(10) primary key,--课程号
Fcname nvarchar(20) not null,--课程名
Fccredit int check(Fccredit>0),--学分
Fsemster int check(Fsemster>0),--学期
Fperiod int check(Fperiod>0)--学时
)
create table T_Sc(
Fsno char(10) foreign key(Fsno) references T_student(Fson),--学号
Fcno char(10) foreign key(Fcno) references T_Course(Fcno),--课程号
Fgrade int check(Fgrade between 0 and 100),--成绩
--primary key(Fsno,Fcno)这一句有误,回来再斟酌下
)
我想查询每样课程的学习人数,该课程的名字,该课程最高成绩的学生姓名
这应当如何查询?

INSERT INTO T_Student
SELECT '01', '张三', '男', 20, '计算机系' UNION ALL
SELECT '02', '李四', '女', 19, '计算机系' UNION ALL
SELECT '03', '王五', '男', 18, '计算机系' UNION ALL
SELECT '04', '赵六', '女', 17, '计算机系'

INSERT INTO T_Course
SELECT 'DB', '数据库', 5, 1, 40 UNION ALL
SELECT 'C', 'C语言', 5, 1, 40 UNION ALL
SELECT 'OS', '操作系统', 5, 1, 40 UNION ALL
SELECT 'CO', '编译原理', 5, 1, 40

INSERT INTO T_Sc
SELECT '01', 'DB', 60 UNION ALL
SELECT '02', 'DB', 70 UNION ALL
SELECT '03', 'DB', 80 UNION ALL
SELECT '04', 'DB', 90 UNION ALL
SELECT '01', 'C', 60 UNION ALL
SELECT '02', 'C', 70 UNION ALL
SELECT '03', 'C', 80 UNION ALL
SELECT '01', 'OS', 60 UNION ALL
SELECT '02', 'OS', 70 UNION ALL
SELECT '01', 'CO', 60
GO

SELECT
T_Course.Fcno,
T_Course.Fcname,
COUNT( DISTINCT T_Student.Fson ) AS 学习人数,
(SELECT Fsname FROM T_Student ts JOIN T_Sc tsc ON (ts.Fson = tsc.Fsno)
WHERE tsc.Fcno = T_Course.Fcno AND tsc.Fgrade = MAX(T_Sc.Fgrade) ) AS 最高成绩的学生姓名
FROM
T_Sc
JOIN T_Student
ON (T_Sc.Fsno = T_Student.Fson)
JOIN T_Course
ON (T_Sc.Fcno = T_Course.Fcno)
GROUP BY
T_Course.Fcno,
T_Course.Fcname;

Fcno Fcname 学习人数 最高成绩的学生姓名
---------- -------------------- ----------- ----------
C C语言 3 王五
CO 编译原理 1 张三
DB 数据库 4 赵六
OS 操作系统 2 李四

(4 行受影响)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-02
用group on分组查询,自己查下用法吧。追问

能给下源码么?
懒了,嘿嘿^_^
给个链接也行

相似回答