/************ 如果同门课最高成绩相同的人员资料都会显示 ****************/
----学号   姓名   科目   成绩
----成绩表
select a.* from 成绩表 a where exists(select 1 from (
select max([成绩]) as 成绩,[科目] from 成绩表 group by [成绩],[科目]
)b where a.[科目]=b.[科目] and a.[成绩]=b.[成绩])

解决方案 »

  1.   

    select * from 成绩表 a where not exists(select 1 from 成绩表 where 科目=a.科目 and 成绩>a.成绩)
      

  2.   

    select a.* from 成绩表 a,(select 科目,成绩=max(成绩) from 成绩表 group by 科目) b where a.科目=b.科目 and a.成绩=b.成绩
      

  3.   

    select * from 成绩表 where checksum(科目,成绩) in (select  checksum(科目,max(成绩)) from 成绩表 group by 科目)
      

  4.   

    declare @t  table(no int , name varchar(20) , subject varchar(20), score int)
    insert into @t
    select 1, '张三', '语文', 80   union
    select 2, '李四', '语文', 83   union
    select 3, '王五', '英语', 99   union
    select 4, '李四', '数学', 88   union
    select 5, '张三', '英语', 66   union
    select 6, '王五', '数学', 87   union
    select 7, '李四', '英语', 69   union
    select 8, '张三', '数学', 63   union
    select 9, '王五', '语文', 77select * from @t a
    where not exists
    (
      select 1 from @t b 
      where a.subject  = b.subject and b.score > a.score
    )
      

  5.   

    借楼上的数据:
    declare @t  table(no int , name varchar(20) , subject varchar(20), score int)
    insert into @t
    select 1, '张三', '语文', 80   union
    select 2, '李四', '语文', 83   union
    select 3, '王五', '英语', 99   union
    select 4, '李四', '数学', 88   union
    select 5, '张三', '英语', 66   union
    select 6, '王五', '数学', 87   union
    select 7, '李四', '英语', 69   union
    select 8, '张三', '数学', 63   union
    select 9, '王五', '语文', 77
    select * from @t b
    inner join
    (select subject,max(score) as score from @t
    group by subject) a on a.subject=b.subject and b.score=a.score
      

  6.   

    这个题目就是有问题
    学号字段与学生姓名没有绑定的话
    那么就是说 即使是同样姓名的也不是同1个人
    要不学号实际只是一个计数字段而已
    当他是计数字段..那么就不管了
    1楼的子查询  group by 可以不要成绩
      

  7.   

    select a.* from 成绩表 a,(select 科目,成绩=max(成绩) from 成绩表 group by 科目) b where a.科目=b.科目 and a.成绩=b.成绩
      

  8.   

    select a.* from 成绩表 a
      join (select 科目,成绩=max(成绩) from 成绩表 group by 科目) b on (a.科目=b.科目 and a.成绩=b.成绩)
      

  9.   

    select * from 成绩表 a where 学号=(select top 1 学号 from 成绩表 where 
    科目=a.科目 order by 成绩 desc)
      

  10.   

    SELECT *
    FROM 成绩表
    WHERE (成绩 IN
              (SELECT MAX(成绩)
             FROM 成绩表
             GROUP BY 科目))
      

  11.   

    主要就是考你top的用法就是记录取出前1条,再取出不在前面记录里的前3条嘛select * from 表 top 1 where (not exists select * from 表 top 3)
      

  12.   

    declare @t  table(学号 int , 姓名 varchar(20) , 科目 varchar(20), 成绩 int)
    insert into @t
    select 1, '张三', '语文', 80   union
    select 2, '李四', '语文', 83   union
    select 3, '王五', '英语', 99   union
    select 4, '李四', '数学', 88   union
    select 5, '张三', '英语', 66   union
    select 6, '王五', '数学', 87   union
    select 7, '李四', '英语', 69   union
    select 8, '张三', '数学', 63   union
    select 9, '王五', '语文', 77select * from @t a where 学号 in(select top 1 学号 from @t  where 科目=a.科目 order by 成绩 desc)
      

  13.   

    select a.* from 成绩表 a 
    join (select max(成绩) as 成绩 from 成绩表 group by 科目) b on b.成绩=a.成绩
      

  14.   

    select * from 成绩表 where 成绩 IN
        (select max(成绩) from 成绩表 group by 姓名)
    order by 学号;
      

  15.   

    select * from 成绩表 where 成绩 IN
        (select max(成绩) from 成绩表 group by 科目)
    order by 学号;
      

  16.   


    declare @t  table(学号 int , 姓名 varchar(20) , 科目 varchar(20), 成绩 int)
    insert into @t
    select 1, '张三', '语文', 80   union
    select 2, '李四', '语文', 83   union
    select 3, '王五', '英语', 99   union
    select 4, '李四', '数学', 88   union
    select 5, '张三', '英语', 66   union
    select 6, '王五', '数学', 87   union
    select 7, '李四', '英语', 69   union
    select 8, '张三', '数学', 63   union
    select 9, '王五', '语文', 77select b.* from @t b
    inner join
    (select 科目,max(成绩) 成绩 from @t
    group by 科目) a on a.科目=b.科目 and b.成绩=a.成绩这条SQL语句性能比较好吧, 应该比IN 的效率高.
      

  17.   

    支持itblog的方法
    select * from 成绩表 a where not exists(select 1 from 成绩表 where 科目=a.科目 and 成绩>a.成绩)
    这个很方便啊,而且效率也比较高
      

  18.   

    select a.学号,a.姓名,a.科目,a.成绩
    from 成绩表 a 
    right join (select 科目,max(成绩) as 成绩 
                from 成绩表 group by 科目) as b 
    on a.科目=b.科目 and a.成绩=b.成绩
    order by a.学号result:(有個疑問,學號怎麼和姓名不對應的?)学号         姓名                 科目                 成绩     
    ----------- -------------------- -------------------- ----------- 
    2           李四                  语文                83
    3           王五                  英语                99
    4           李四                  数学                88
      

  19.   

    强人好多,这里贴上我的,权作负面教程。SELECT *
    FROM 成绩表
    WHERE (学号 IN
              (SELECT 成绩表.学号
             FROM 成绩表 INNER JOIN
                       (SELECT 科目, MAX(成绩) AS 最大成绩
                      FROM 成绩表
                      GROUP BY 科目) table2 ON 成绩表.科目 = table2.科目 AND 
                   成绩表.成绩 = table2.最大成绩))
      

  20.   

    declare @t  table(no int , name varchar(20) , subject varchar(20), score int)
    insert into @t
    select 1, '张三', '语文', 80   union
    select 2, '李四', '语文', 83   union
    select 3, '王五', '英语', 99   union
    select 4, '李四', '数学', 88   union
    select 5, '张三', '英语', 66   union
    select 6, '王五', '数学', 87   union
    select 7, '李四', '英语', 69   union
    select 8, '张三', '数学', 63   union
    select 9, '王五', '语文', 77select a.no,a.name,a.subject from @t a 
    inner join 
    (select subject,max(score) as score from @t group by subject) b
    on a.subject=b.subject and a.score=b.score
      

  21.   

    SELECT *
    FROM 成绩表
    WHERE (成绩 IN
              (SELECT MAX(成绩)
             FROM 成绩表
             GROUP BY 科目))
    这种方式不太行,成绩可能会出现相同的值,可以再加一层,根据学号(虽然学号只是代表记录号)来查询记录。
      

  22.   

    create table #temp3 (学号 int,   姓名 char(10), 科目 char(10),  成绩 int)insert into #temp3 select 1,      '张三' , '语文',  80 union all
    select 2,      '李四',  '语文',  83 union all
    select 3,      '王五',  '英语',  99 union all
    select 4,      '李四',  '数学',  88 union all
    select 5,      '张三',  '英语',  66 union all
    select 6,      '王五',  '数学',  87 union all
    select 7,      '李四',  '英语',  69 union all
    select 8,      '张三',  '数学',  63 union all
    select 9,      '王五',  '语文',  77select * from #temp3
    order by 科目,成绩select * from #temp3 as a where not exists (select 1 from #temp3 where 科目=a.科目 and 成绩>a.成绩)select a.* from #temp3 as a inner join 
    (select 科目,max(成绩) as '成绩'
    from #temp3
    group by 科目) as b on a.科目=b.科目 and a.成绩=b.成绩
      

  23.   

    SELECT *
    FROM 成绩表
    WHERE 学号 in 
    (select 学号 from 
      (SELECT 学号,科目,MAX(成绩) FROM 成绩表
    GROUP BY 科目))
    如果学号是学生的唯一编号,那么这个问题就非常简单了。
    select 学号,姓名、科目、成绩 from 成绩表 as a,
    (select 科目,max(成绩) as score from 成绩表 group by 科目) as b 
    where a.科目 = b.科目 and a.成绩 = b.score
      

  24.   

    昨天在给学生讲SQL时突然发现,上次回的贴子欠缺考虑,回去重做了一下,
    现给出新的答案:SELECT *
    FROM 成绩表
    WHERE ((科目 + CONVERT(varchar, 成绩))) IN
              (SELECT (科目 + CONVERT(varchar, MAX(成绩))) 
             FROM 成绩表
             GROUP BY 科目)
      

  25.   

    create table #grade
    (stu_id char(10),
    stu_name char(20),
    subject char(20),
    grade numeric
    )select #grade.* from 
    (select subject,max(grade) as grade
    from #grade
    group by subject) as temp1,#grade
    where temp1.subject+'+'+str(temp1.grade) = #grade.subject+'+'+str(#grade.grade)???档
      

  26.   

    select b.* from 
    (
      select a.obj,max(a.)  from  a
      group by a.obj
    ) a, b
    where a.obj=b.obj and a.=b.这个绝对可以!
      

  27.   

    Select name,max(s) from @T group by name
      

  28.   

    declare @t  table(no int , name varchar(20) , subject varchar(20), s int)
    insert into @t
    select 1, '张三', '语文', 80   union
    select 2, '李四', '语文', 83   union
    select 3, '王五', '英语', 99   union
    select 4, '李四', '数学', 88   union
    select 5, '张三', '英语', 66   union
    select 6, '王五', '数学', 87   union
    select 7, '李四', '英语', 69   union
    select 8, '张三', '数学', 63   union
    select 9, '王五', '语文', 77Select * from @T order by [name]Select a.* from @t a,(Select subject,max(s) as s from @T group by subject) b where a.subject=b.subject and a.s=b.s