工作中遇到的sql查询有关问题,求大神帮个忙,多谢您

工作中遇到的sql查询问题,求大神帮个忙,谢谢您
记录表:
              id
              AP_APPLYGRADE   --年级     (对应tag_id)
             ap_reason                   --申请理由(对应ar_code)
理由表:
            ar_code                  --id
            ar_name                  --申请理由
年级表:
            tag_id                    --年级ID
            tag_name             --年级名称

现在要查询记录表中  每一个年级 的 每一个申请理由 有多少行数据  并且按照每一个年级来一个小计 所有年级 来个总和



  想了很久没想出来,大神救救我
------解决思路----------------------
楼主解决没?发完帖子就没下文了,给你写下吧工作中遇到的sql查询有关问题,求大神帮个忙,多谢您
select max(b.tag_name),max(c.ar_name),count(*) 
from 记录表 a,年级表 b,理由表 c
where a.AP_APPLYGRADE=b.tag_id 
and a.ap_reason=c.ar_code
group by rollup(a.AP_APPLYGRADE,a.ap_reason);

------解决思路----------------------
select max(b.tag_name),max(c.ar_name),count(*) from 记录表 a,年级表 b,理由表 c
where a.AP_APPLYGRADE=b.tag_id and a.ap_reason=c.ar_code
group by rollup(a.AP_APPLYGRADE,a.ap_reason);
group by后带rollup子句的功能可以理解为:先按一定的规则产生多种分组,然后按各种分组统计数据(至于统计出的数据是求和还是最大值还是平均值等这就取决于SELECT后的聚合函数)。
group by后带rollup子句所返回的结果集,可以理解为各个分组所产生的结果集的并集且没有去掉重复数据 。
另:group by后带rollup子句与group by后带cube子句的唯一区别就是:带cube子句的group by会产生更多的分组统计数据。cube后的列有多少种组合(注意组合是与顺序无关的)就会有多少种分组。