有两张表,如下班级表
ID         //学生ID
ClassName   //班级名
Grade      //该班所属年级
ScoreID    //该班成绩单ID成绩表(存放了该班所有同学的成绩,只要是同一个班的学生的成绩单ID都是一样的,不同班才不一样)
ScoreID   //成绩单ID
chinese   //语文成绩
math      //数学成绩
目的:找出某个年级的每个班上数学成绩分最高的那些成绩单。比如,一年级有3个班,那么就应该找出3条上面的记录出来,例如
ClassName  语文成绩  数学成绩
一年级一班 80        90
一年级二班 70        80
一年级三班 60        40
怎么写这个SQL语句?谢谢大家了

解决方案 »

  1.   

    对不起,"ID //学生ID" 应该是"班级ID",修改一下,免得大家误会
      

  2.   


    create table lkClass (
    id int not null primary key,
    classname varchar(20),
    grade varchar(20),
    scoreid int
    );create table lkScore (
    scoreid int default null,
    chinese int default 0,
    math int default 0,
    key `fk_class` (`scoreid`),
    constraint `fk_class` foreign key (`scoreid`) references `lkClass`(`id`)
    );
    set names gbk;
    insert into lkclass(id,classname,grade,scoreid) values
    (1,'一班','三年级',1),
    (5,'一班','四年级',5),
    (2,'二班','三年级',2),
    (3,'三班','三年级',3),
    (4,'四班','三年级',4);
    insert into lkscore values
    (1,90,80),
    (2,100,99),
    (3,29,98),
    (4,87,79),
    (5,89,99),
    (1,49,98),
    (3,98,56),
    (2,76,88),
    (2,80,90),
    (3,90,70),
    (1,90,90),
    (1,67,90);select concat(a.grade,a.classname),b.chinese,max(b.math) from lkclass a,lkscore b where a.scoreid = b.scoreid and a.grade = '三年级'
    group by b.scoreid;结果:
    query result(4 records)
    concat(a.grade,a.classname) chinese max(b.math) 
    三年级一班 90 98 
    三年级二班 100 99 
    三年级三班 29 98 
    三年级四班 87 79 
      

  3.   

    select concat(a.grade,a.classname),b.chinese,b.math from lkclass a,
    (
      select * from 
      (
        select * from lkscore order by math desc
      ) T group by scoreid
    ) b
    where a.scoreid = b.scoreid and a.grade = '三年级'; 
    query result(4 records)
    concat(a.grade,a.classname) chinese math 
    三年级一班 49 98 
    三年级二班 100 99 
    三年级三班 29 98 
    三年级四班 87 79 
      

  4.   

    详细的分析看这里:http://blog.chinaunix.net/u/29134/showart_411484.html
      

  5.   

    yueliangdao0608真是好同志,分析得很透彻和全面,再次表示感谢!
    虽然我现在还没看明白,但是肯定会把它搞明白的,也不枉你你花时间解答。