mysql如何实现每隔N行生成一个汇总行

小编给大家分享一下mysql如何实现每隔N行生成一个汇总行,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

处理这种每隔N行生成一个汇总行的需求,一共有三种方式

  • select when c is null then ‘汇总’ else ” end s,ifnull(c,sumc) c from (  

  •     select ceil(id/3) l,c,null sumc  

  •     from   

  •     (  

  •         select @id:=@id+1 id, t1.* from t t1,(select @id:=0) vars    

  •     ) t2  

  •     union all    

  •     select ceil(id/3) l,null,from   

  •     (  

  •         select @id1:=@id1+1 id, t1.* from t t1,(select @id1:=0) vars    

  •     ) t3  

  •     group by l  

  • ) t order by l,ifnull(c,’9999′); 

  • 结果:

  • 第二招,数字辅助表补全. 性能较好. 计算汇总行,理解稍微复杂.

  • 先增加一个数字辅助表 nums

  1. table(int null)delimiter $$

  2.  procedure pCreateNumscnt )

  3.     declare s default;

  4. truncate  nums    while s=        intoselect;

  5. set=+;

  6. end;

  7.  $$

  8. ;

  9. create(intbegin

  10. int  1    table;

  11. insert  nums  s    while s2=        intoselect+from;

  12. set=*;

  13. end;

  14.  $$

  15. ;

  • 初始化数字辅助表

  • select s,ifnull(c,cc) c  

  • from (    

  •     select     

  •     when rn is null then ‘汇总’ else ” end s,     

  •     t4.c,  

  •     if(mod(t3.id,4)!=0 ,when @total=-1 then @total:=t4.c else @total:=@total+t4.c end,@total) cc,  

  •     when mod(t3.id,4)=0 then @total:=-1 else null end     

  •     from (    

  •         select * from nums where id<=    

  •         (select (ceil(from t )    

  •     ) t3    

  •     join (    

  •         select     

  •         when mod(@rn+1,4)=0 then @rn:=@rn+2 else @rn:=@rn+1 end rn ,    

  •         t1.* from t t1,(select @rn:=0,@total:=0) vars      

  •     ) t4 on(t3.id=t4.rn)    

  • ) result;    

  • 这个理解稍微有点复杂,

  • 第二招改进版本

    1. select when id is null then ‘汇总’ else ” end s,from (  

    2.     select @id:=@id+1 id, t1.* from t t1,(select @id:=0) vars      

    3. ) t2  

    4. group by ceil(t2.id/3),t2.id with rollup;  

    以上是“mysql如何实现每隔N行生成一个汇总行”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注云搜网行业资讯频道!


    【AD】美国洛杉矶/香港/日本VPS推荐,回程电信CN2 GIA线路,延迟低、稳定性高、免费备份_搬瓦工

    【AD】炭云:36元/年/1GB内存/20GB SSD空间/500GB流量/5Gbps端口/KVM/香港/国际线路LUMEN