表结构
teacherID 
score
两个字段
teacherID score
1         60
1         70
1         802         60
2         80
2         60一个teacherID可能有30-40条记录可能更多,现在只要前面20条记录然后计算平均分
这个SQL该如何写,谢谢

解决方案 »

  1.   

    每个 techerid 取前 20 条? 这个前 20 是按什么排序的?
      

  2.   

    select avg(score) from (select top 20 * from teacherid order by tearerid) t
      

  3.   


    SELECT
    A.teacherID,
    平均 = (
    SELECT AVG(score)
    FROM(
    SELECT TOP 20
    score
    FROM 你的表 B
    WHERE A.teacherID = B.teacherID
    ORDER BY score  -- 你的排序, 可以去掉这个, 表示随意的 20 条
    )AA)
    FROM(
    SELECT DISTINCT
    teacherID
    FROM 你的表
    )A
      

  4.   

    DECLARE @TB TABLE(teacherID INT, score INT)
    INSERT @TB
    SELECT 1,  60 UNION ALL 
    SELECT 1,  70 UNION ALL 
    SELECT 1,  80 UNION ALL 
    SELECT 2,  60 UNION ALL 
    SELECT 2,  80 UNION ALL 
    SELECT 2,  60SELECT *,ID=IDENTITY(INT,1,1) INTO # FROM @TBSELECT teacherID,SCORE,ID=ID-(SELECT COUNT(*) FROM @TB WHERE teacherID<A.teacherID)  INTO #T FROM # AS A SELECT teacherID,AVG(SCORE) AS SCORE
    FROM (
    SELECT * FROM #T WHERE ID<=20
    ) A 
    GROUP BY teacherIDDROP TABLE #
    DROP TABLE #T
    /*
    teacherID   SCORE       
    ----------- ----------- 
    1           70
    2           66
    */
      

  5.   

    DECLARE @T TABLE(teacherID INT, score FLOAT) 
    INSERT @T SELECT 1 ,       60 
    INSERT @T SELECT 1 ,       70 
    INSERT @T SELECT 1 ,       80 
    INSERT @T SELECT 2 ,       60 
    INSERT @T SELECT 2 ,       80 
    INSERT @T SELECT 2,        60 
    SELECT teacherID,AVG( score  ) FROM (
    select * from @T a
    where checksum(*) in (select top 20 checksum(*) from @T b where a.teacherID=b.teacherID))T GROUP BY teacherID
    /*teacherID                                                         
    ----------- ----------------------------------------------------- 
    1           70.0
    2           66.666666666666671
    */
      

  6.   

    select teacherid ,avg(score) from table group by teacherid having count(teacherid)=20
      

  7.   

    to:wufeng4552 我的是ACCESS数据库,是不是不支持呢?
      

  8.   

    to:wsl418
    这样应该不对吧, 
      

  9.   

    /*不知道access有沒有checksum,你試下看看
    或者,增加個自增列 ID*/
    DECLARE @T TABLE(ID int identity(1,1),teacherID INT, score FLOAT) 
    INSERT @T SELECT 1 ,       60 
    INSERT @T SELECT 1 ,       70 
    INSERT @T SELECT 1 ,       80 
    INSERT @T SELECT 2 ,       60 
    INSERT @T SELECT 2 ,       80 
    INSERT @T SELECT 2,        60 
    SELECT teacherID,AVG( score  ) FROM (
    select * from @T a
    where id in (select top 20 id from @T b where a.teacherID=b.teacherID))T GROUP BY teacherID