站长网 MySql教程 mysql如何实现每隔N行生成一个汇总行

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

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

小编给大家分享一下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');
 
结果:
 
mysql如何实现每隔N行生成一个汇总行
 
第二招,数字辅助表补全. 性能较好. 计算汇总行,理解稍微复杂.
 
 
先增加一个数字辅助表 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行生成一个汇总行”这篇文章的所有内容,感谢各位的阅读!

本文来自网络,不代表站长网立场,转载请注明出处:https://www.tzzz.com.cn/html/jc/mysql/2021/1223/42449.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部