use strict; use warnings; use DBI; use JSON 'encode_json'; use cheap::mysqls qw/sql_connect/; my ($DBH,$rc) = sql_connect(id=>'finddata',dbi=>'mysql'); # my ($DBH,$rc) = sql_connect(id=>'finddata',dbi=>'sqlite'); $DBH->do('DROP view IF EXISTS datas '); $DBH->do('create view datas as select queue_name as name, jobs_pend as data1, jobs_run as data2 from queues '); my @arr; my $stmt="select name,data1,data2 from datas "; my $sth = $DBH->prepare( $stmt ); $sth->execute() or die $sth->errstr; while(my @row_array=$sth->fetchrow_array) { push @arr,[@row_array]; } $sth->finish; print sumup(5,1,\@arr)."\n"; print sumup(5,2,\@arr)."\n"; $DBH->do('DROP view IF EXISTS datas '); $DBH->disconnect(); exit; sub sumup { my $testn=shift; my $col=shift; my $arr=shift; my @sort1=sort {$arr->[$b][$col] <=> $arr->[$a][$col]} 0..$#$arr; my @out1; my $rc=0; for my $rown (@sort1) { if ($rc<=$testn) { push @out1,[$arr->[$rown][0],$arr->[$rown][$col]];} else {$out1[-1][1]+=$arr->[$rown][$col]} $rc++; } $out1[$testn][0]='added'; return encode_json( \@out1 ); } #### [["adice_short","254"],["normal","170"],["ncsim_long","41"],["adice_long","5"],["ncsim_lp","1"],["added",0]] [["adice_short","192"],["ncsim_short","84"],["ncsim_long","78"],["adice_long","39"],["normal","30"],["added",34]]