班级 姓名 语文
一班 小小 78
一班 大大 68
二班 他他 70
二班 她她 50
想实现成
班级 平均分 平均分排名  及格率   及格率排名
一班  73        1        100%        1
二班  60        2        50%         2用的是access数据库,所以尽量用select 语句。感谢呀!及格率>=60--access
SELECT 班级,平均分
      ,1 + ( SELECT COUNT(*)
             FROM ( SELECT 班级,AVG(语文) AS 平均分
                    FROM tb
                    GROUP BY 班级
                  )T
             WHERE 平均分<TT.平均分
           ) AS 平均分排名
FROM ( SELECT 班级,AVG(语文) AS 平均分
       FROM tb
       GROUP BY 班级
     )TT上面是一个大哥写的语句已经做了“班级 平均分 平均分排名”,自己研究了一下,想写“ 及格率   及格率排名”没成功,特此求助,感谢呀!!

解决方案 »

  1.   

    SELECT 班级, 平均分, 1 + ( SELECT COUNT(*)
                 FROM ( SELECT 班级,AVG(语文) AS 平均分
                        FROM tb
                        GROUP BY 班级
                      )T
                 WHERE 平均分>TT.平均分
               ) AS 平均分排名, 及格率, ( SELECT COUNT(*)
                   FROM ( SELECT 班级,SUM(IIF(语文>=60,1,0))*100/COUNT(*) AS 及格率
                          FROM tb
                          GROUP BY 班级
                        )T
                   WHERE 及格率<TT.及格率
              ) AS 及格率排名
    FROM [SELECT 班级,AVG(语文) AS 平均分,TRIM( SUM(IIF(语文>=60,1,0))*100/COUNT(*))+'%' AS 及格率
           FROM tb
           GROUP BY 班级
         ]. AS TT;