ID 班级 姓名 分数
1 一班 张 98
2 一班 李 92
3 一班 王 91
4 二班 孙 40
5 二班 赵 60
6 三班 钱 87
7 三班 洪 88
得到每个班级最高分数的人,结果如下
1 一班 张 98
5 二班 赵 60
7 三班 洪 88谢谢呀~

解决方案 »

  1.   

    SELECT * FROM TB T1 WHERE NOT EXISTS(
    SELECT 1 FROM TB T2 WHERE T2.班级=T1.班级 AND T2.分数>T1.分数
    )
    如果有分数一样的就全列出来了。
      

  2.   


    --> 测试数据:[TB]
    if object_id('[TB]') is not null drop table [TB]
    create table [TB]([ID] int,[班级] varchar(4),[姓名] varchar(2),[分数] int)
    insert [TB]
    select 1,'一班','张',98 union all
    select 2,'一班','李',92 union all
    select 3,'一班','王',91 union all
    select 4,'二班','孙',40 union all
    select 5,'二班','赵',60 union all
    select 6,'三班','钱',87 union all
    select 7,'三班','洪',88select * from TB T where not exists(select 1 from TB where T.[班级]=[班级] and t.[分数]<[分数])/*
    ID          班级   姓名   分数
    ----------- ---- ---- -----------
    1           一班   张    98
    5           二班   赵    60
    7           三班   洪    88(3 行受影响)*/
    drop table TB
      

  3.   

    if object_id('[TB]') is not null drop table [TB]
    go
    create table [TB]([ID] int,[班级] varchar(4),[姓名] varchar(2),[分数] int)
    insert [TB]
    select 1,'一班','张',98 union all
    select 2,'一班','李',92 union all
    select 3,'一班','王',91 union all
    select 4,'二班','孙',40 union all
    select 5,'二班','赵',60 union all
    select 6,'三班','钱',87 union all
    select 7,'三班','洪',88select * from tb t where 分数=(select max(分数) from tb where 班级=t.班级 )/* 
    ID          班级   姓名   分数
    ----------- ---- ---- -----------
    1           一班   张    98
    7           三班   洪    88
    5           二班   赵    60(3 行受影响)
    */
      

  4.   

    select * from table where 分数 in (select max(分数) from table group by 班级 )
    很简单
      

  5.   

    错了  应该是:
    select A.ID,A.班级,A.姓名,A.分数,MAX(A.分数) from table A INNER JOIN table B ON 
       A.ID=B.ID 
     GROUP BY A.ID,A.班级,A.姓名,A.分数