加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql怎样实现每隔N行生成一个汇总行

发布时间:2023-09-02 13:05:30 所属栏目:MySql教程 来源:
导读:小编给大家分享一下mysql如何实现每隔N行生成一个汇总行,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!处理这种每隔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

table(int null)delimiter $$

 procedure pCreateNumscnt )

    declare s default;

truncate  nums    while s=        intoselect;

set=+;

end;

 $$

;

create(intbegin

int  1    table;

insert  nums  s    while s2=        intoselect+from;

set=*;

end;

 $$

;

初始化数字辅助表

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;   

这个理解稍微有点复杂,

第二招改进版本

select when id is null then '汇总' else '' end s,from (  

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

) t2  

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

以上是“mysql如何实现每隔N行生成一个汇总行”这篇文章的所有内容,感谢各位的阅读!

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章