SELECT colIP, SUM(colPartitionSize) as size, SUM(colPartitionFree) as free FROM table_name GROUP BY colIP #### my $rows = ...; # ref to AoH my %ips; foreach my $row (@$rows){ $ips{ $row->{colIP} }->{ colPartitionSize } += $row->{colPartitionSize}; $ips{ $row->{colIP} }->{ colPartitionFree } += $row->{colPartitionFree}; } print Dumper \%ips;