假设有两个表:
成绩表(Record):学号(Number)<主键>、成绩(Score)
学生表(Student):学号(Number)<主键>、姓名(Name)、班级(Class)
用SQL语句实现下面查询。
1)每个班最高分数与最低分数的差(最高分-最低分)
2)每个班的分数第二名的姓名

解决方案 »

  1.   

    1  SELECT max(Score) - min(Score) FROM Record WHERE Number IN (SELECT Number FROM Student GROUP BY Class)2 
      

  2.   

    (1) select max(Score)-min(Score) from Record;(2) select name,Class from record r,student s where r.number=s.number and record=
        (
           select max(Score) from Record,Student where Record.Number=Student.number and Student.Class=s.Class
           and Score<>(select max(Score) from Record,Student where Record.Number=Student.number and Student.Class=s.Class)
        )
        group by class,name另外,Record,Score,Class这三个是关键字(有些数据库是有些数据库不是),最好改成其他名字
      

  3.   

    (1) select max(Score)-min(Score) from record r,student s where r.number=s.number
        group by s.class;
      

  4.   

    2) SELECT max(Score) FROM Record,student  WHERE Record.Number not IN (select max(Score) from record r,student s where r.number=s.number 
        group by s.class) and Record.number=student.number group by student.class
    1)select max(Score)-min(Score) from record r,student s where r.number=s.number 
        group by s.class;
      

  5.   


    create database testdemo 
    go
    use testdemo
    go
    create table Record
    (
       Number int  primary key,
       Score numeric(3,1)
    )
    go
    create table Student
    (
        Number int primary key,
        Name varchar(20),
        class varchar(20)
    )
    go
    --插入数据
    insert into Record
    select 1,55
    union 
    select 2,33
    union 
    select 3,45
    union 
    select 4,45
    union 
    select 5,35
    insert into Student
    select 1,'zz','class1'
    union
    select 2,'qq','class1'
    union
    select 3,'fdsf','class2'
    union 
    select 4,'asdfds','class2'
    union 
    select 5,'sdf','class2'
    --第一题
    select max(score)-min(score) as 最高分数与最低分数的差, class
    from Record r inner join Student s on r.number=s.number
    group by class 
    --第二题.....
      

  6.   

    (2) select e.Class, e.Name from (select Class, Name, r.Number,r.Score from Record as r join Student as s on r.Number = s.Number) as e join  (select d.Class, max(d.Score)  as max2th from  (select s.Class, r.Number,r.Score  from Record as r join Student as s on r.Number = s.Number join 
     (select Class,  max(r2.Score)  as max_score from Record as r2 join Student as s2 on r2.Number = s2.Number group by s2.Class) as c on s.Class = c.Class and 
    r.Score <> c.max_score) as d group by d.Class) as g on e.Class = g.Class and e.Score = g.max2th
      

  7.   

    (1) select max(Score)-min(Score) from record r,student s where r.number=s.number
        group by s.class; 
      

  8.   

    1.select y.Class,Max(Score)-Min(Score)as 最高分减去最低分 from Record x,Student y where x.Number=y.Number group by y.Class
    2.
    select x.Name as Numbertwo,x.Class from Student x,Record y where x.Number=y.Number and y.Score in
    (select Max(Score) from Student,Record where Student.Number=Record.Number and Student.Class=x.Class and Record.Score not in (Select Max(Score) from Student,Record where Student.Number=Record.Number and Student.Class=x.Class))
    group by x.Name,x.Class
      

  9.   

    第一题比较简单。。就不解答了
    第二题select Name,Score from (
    select Score, Class, Name from Record r inner join student s on s.number = r.number group by Class having Score <> max(Score)) temp group by temp.Class having Score = max(Score);
    ]蜗壳网: http://www.wokenet.com/
    笔记本电脑新闻,行情,导购,评测,论坛,做最专业的数码产品搜索引擎