千家信息网

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

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,小编给大家分享一下mysql如何实现每隔N行生成一个汇总行,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!处理这种每隔N行生
千家信息网最后更新 2025年11月07日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行生成一个汇总行"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0