$eventscores = [ [riderid, actionid, score], [riderid, actionid, score], [riderid, actionid, score], ... ]; #### $eventscores = { riderid => { actionid => score actionid => score ... }, ... }; #### foreach my $rider (keys %$eventscores) { my @scores = values %{$eventscores->{$rider}}; # or, if you need the scores in order my @scores = map {$eventscores->{$rider}{$_}} sort keys %{$eventscores->{$rider}}; # do something with $rider and @scores } #### select riderid, AVG(score) from eventscores group by riderid order by riderid