我想用mysql存储过程做一个统计
表 class(id,grade,class,girlnum,boynum,birdate),
         主键,年级,班级,女生人数,男生人数,生日
即第一列是按某个字段进行统计的,oracle有个grouping,可以第一列动态统计,mysql没怎么用过,这里请教大家了:
想要的结果是:
结果1:
班级    男生  女生
1年1班  10     20
1年2班  11     21
2年1班  12     22
结果2:
年级   男生 女生
1年级   21  41
2年级   12   22
结果3:按一年12月统计
年月      男  女
2012-1  2   2
2012-2  3   4
...     ... ...
2012-12 1   0

解决方案 »

  1.   


    select 班级,sum(女生人数),sum(男生人数) from class group by 班级
    MYSQL中同样有GROUP, 其余的语句你可以自己先尝试一下。
      

  2.   

      SELECT
                    Decode(Grouping(equtype),1,'总计',equtype) as equtype,
                    Sum(Decode(equstate,'入所',1,0)) "入所",
                    Sum(Decode(equstate,'待修',1,0)) "待修",
                    Sum(Decode(equstate,'工程',1,0)) "工程",
                    Sum(Decode(equstate,'返厂',1,0)) "返厂",  Count(1) "总计" 
    FROM (SELECT * FROM (select * from t1 union  select * from t2 union  select * from t3) t WHERE   
     isnew='是' )GROUP BY GROUPING SETS((equtype),())这个grouping的意思是按动态列来统计,传入字段如果是class班级,则第一列是班级,
    传入字段是grade 则第一列为年级;同理传入是birdate,则按时间统计,按那个字段属性统计是动态传入的
    有没有这样的grouping?
    select @fieldname ,sum(grisnum),sum(boysnum) from class group by @fieldname?
      

  3.   

    没有,你需要自己在程序中进行控制以生成需要的SQL语句。