select *
from tb a
where score>(select avg(score) score from tb where id=a.id)

解决方案 »

  1.   

    create table tb(id char(3),name nvarchar(20),score int);
    insert tb select '001'  , ' 张'   ,    70 
    insert tb select '001'  ,  '张'   ,    80            
    insert tb select '001'  ,  '张'   ,    50 
    insert tb select '002'  ,  '李'   ,    60           
    insert tb select '002'  ,  '李'   ,    90 
    insert tb select '003'  ,  '赵'   ,    100 
    insert tb select '003'  ,  '赵'   ,    60          
    insert tb select '003'  ,  '赵'   ,    70 select * 
    from tb a 
    where score> (select avg(score) score from tb where id=a.id)drop table tb/*
    id   name                 score
    ---- -------------------- -----------
    001   张                   70
    001  张                    80
    002  李                    90
    003  赵                    100(4 行受影响)
    */
      

  2.   

    i like this:
    select a.* from tablename a join 
    (select id,avg(score) score from tablename group by id) b 
    on a.id=b.id and a.score>b.score