注册 登录
编程论坛 SQL Server论坛

麻烦大家帮小弟写一条SQL语句

baobeitianshi 发布于 2008-05-15 22:05, 915 次点击
写出一条语句,在"教学成绩管理数据库1"数据库中,查询"教学成绩表"中,总分最大学生的学号,姓名,总分.
建库建表的SQL语句如下,每个人在"教学成绩表"中有三门成绩.

USE [master]
GO
CREATE DATABASE [教学成绩管理数据库1] ON  PRIMARY
( NAME = N'教学成绩管理数据库', FILENAME = N'D:\教学成绩管理数据库.mdf' , SIZE = 2688KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)
 LOG ON
( NAME = N'教学成绩管理数据库_log', FILENAME = N'D:\教学成绩管理数据库_log.ldf' , SIZE = 504KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)
 COLLATE Chinese_PRC_CI_AS
GO
USE [教学成绩管理数据库1]
GO
CREATE TABLE [dbo].[教学成绩表]
(
    [学号] [char](6) COLLATE Chinese_PRC_CI_AS NOT NULL,
    [课程编号] [char](6) COLLATE Chinese_PRC_CI_AS NOT NULL,
    [分数] [numeric](5, 1) NULL DEFAULT (0),
)
GO
CREATE TABLE [dbo].[学生信息表]
(
    [学号] [char](6) COLLATE Chinese_PRC_CI_AS NOT NULL,
    [姓名] [nchar](4) COLLATE Chinese_PRC_CI_AS NOT NULL,
    [性别] [nchar](1) COLLATE Chinese_PRC_CI_AS NOT NULL,
)
GO
INSERT INTO [教学成绩表]([学号],[课程编号],[分数]) VALUES ('11111','10101',75)
INSERT INTO [教学成绩表]([学号],[课程编号],[分数]) VALUES ('11111','10102',76)
INSERT INTO [教学成绩表]([学号],[课程编号],[分数]) VALUES ('11111','10103',77)
INSERT INTO [教学成绩表]([学号],[课程编号],[分数]) VALUES ('11112','10101',72)
INSERT INTO [教学成绩表]([学号],[课程编号],[分数]) VALUES ('11112','10102',71)
INSERT INTO [教学成绩表]([学号],[课程编号],[分数]) VALUES ('11112','10103',76)
GO
INSERT INTO [学生信息表] ([学号],[姓名],[性别]) VALUES ('11111','小华','男')
INSERT INTO [学生信息表] ([学号],[姓名],[性别]) VALUES ('11112','小李','女')
GO
5 回复
#2
happynight2008-05-16 00:10
SELECT 学生信息表.学号,姓名,MAX(SUM(分数))
FROM 学生信息表 INNER JOIN 教学成绩表
     ON 学生信息表.学号= 教学成绩表.学号
GROUP BY 学生信息表.学号,姓名
没测试过 你试下
#3
baobeitianshi2008-05-16 10:40
兄弟不可以啊.因为不能用MAX(SUM(分数)) , 我想要用到子查询的,SQL是这样报错的:
不能对包含聚合或子查询的表达式执行聚合函数。
#4
happynight2008-05-16 11:14
SORRY 昨天是在家里写的 准备睡觉了 没怎么看仔细 错的一塌糊涂
SELECT 学号,姓名,b.分数
FROM
    (SELECT MAX(分数) 分数
    FROM
        (SELECT 学生信息表.学号,姓名,SUM(分数) 分数
        FROM 学生信息表 INNER JOIN 教学成绩表
             ON 学生信息表.学号= 教学成绩表.学号
        GROUP BY 学生信息表.学号,姓名) AS a) b
INNER JOIN
    (SELECT 学生信息表.学号,姓名,SUM(分数) 分数
    FROM 学生信息表 INNER JOIN 教学成绩表
         ON 学生信息表.学号= 教学成绩表.学号
    GROUP BY 学生信息表.学号,姓名) AS c
ON b.分数=c.分数
写是写了个 但是看着别扭 看有哪位高手能给个更好的
#5
baobeitianshi2008-05-16 11:46
谢谢happynight兄弟,这样写虽然是长了点,可是运行结果是正确的,小弟初学.
#6
baobeitianshi2008-05-17 00:14
还有哪位朋友有更简洁的写法?
1