my %departments; while( $sth->fetchrow() ) { push @{$departments{$department}}, { class => $class, department => $department, count => $count, }; } my @departments = map { { department => $_, classes => $departments{$_} } } keys %departments;