select
sum(IF(wage < '1500' ,'1','0') ) as '1500円以下',
sum(IF(wage > '1499' ,'1','0') )as '1500円以上' ,
sum(IF(wage > '1999' ,'1','0') )as '2000円以上' ,
sum(IF(wage > '2499' ,'1','0') )as '2500円以上' ,
sum(IF(wage > '2999' ,'1','0') )as '3000円以上' ,
sum(IF(wage > '3499' ,'1','0') )as '3500円以上'
from zikyuu
SQL面白い。
CASE構文も使える。
しかしこれをDBIxにどう書くか。
DBIxではCASE構文使えないらしい。
IFでむりくり書こうと思えばかける。
my $row = $schema->resultset('zikyuu')->find(
undef,
{
select => [
{ sum => \'IF(zikyuu.wage < 1500 , 1 , 0 ) ' , -as => 'cun1' },
{ sum => \'IF(zikyuu.wage > 1499 , 1 , 0 ) ' , -as => 'cun2' },
{ sum => \'IF(zikyuu.wage > 1999 , 1 , 0 ) ' , -as => 'cun3' },
{ sum => \'IF(zikyuu.wage > 2499 , 1 , 0 ) ' , -as => 'cun4' },
{ sum => \'IF(zikyuu.wage > 2999 , 1 , 0 ) ' , -as => 'cun5' },
{ sum => \'IF(zikyuu.wage > 3499 , 1 , 0 ) ' , -as => 'cun6' },
],
as => [qw/ cun1 cun2 cun3 cun4 cun5 cun6 /],
join => { 'zikyuu'},
order_by => 'zikyuu.wage DESC',
}
);
my $data;
my %cols = $row->get_columns;
while (my($key,$value) = each(%cols)){
$data->{$key} = $value;
}
これでできた(*^^)v