Schrift
[thread]8586[/thread]

array of hashes: auswerten



<< >> 5 Einträge, 1 Seite
bo
 2006-12-15 16:53
#72575 #72575
User since
2006-05-09
76 Artikel
BenutzerIn
[default_avatar]
hi community,

ich bekomme folgende struktur aus einer datenbankabfrage:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
@array =
(
{ utterance => 'ja', score => 0.27 },
{ utterance => 'nein', score => 0.75 },
{ utterance => 'nein', score => 0.83 },
{ utterance => 'ja', score => 0.53 },
{ utterance => 'ja', score => 0.69 },
{ utterance => 'nicht wirklich', score => 0.59 },
...
);


die werte von utterance können beliebig sein und es können mehrere gleiche werte vorkommen.
ich benötige folgende informationen:

Code: (dl )
1
2
3
utterance: 'ja', anzahl: 3, sum_score: 1.49, min_score: 0.27, max_score: 0.69
utterance: 'nein', anzahl: 2, sum_score: 1.58, min_score: 0.75, max_score: 0.83
utterance: 'nicht wirklich', anzahl: 1, sum_score: 0.59, min_score: 0.59, max_score: 0.59


wie kann man das lösen?
kann man es vielleicht auch direkt mit sql lösen?
pq
 2006-12-15 17:00
#72576 #72576
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
direkt mit sql in etwa so:
[sql]SELECT utterance, count(*) AS anzahl, sum(score) AS sum_score,
min(score) AS min_score, max(score) AS max_score
from ... group by utterance[/sql]

edit: typo\n\n

<!--EDIT|pq|1166194978-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
renee
 2006-12-15 17:01
#72577 #72577
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
In SQL:[sql]SELECT utterance, count(utterance), SUM(score), MIN(score),MAX(score) FROM tabelle GROUP BY utterance;[/sql]
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
bo
 2006-12-15 17:03
#72578 #72578
User since
2006-05-09
76 Artikel
BenutzerIn
[default_avatar]
perfekt :)

vielen dank
renee
 2006-12-15 17:07
#72579 #72579
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Und für diejenigen, die an einer Perl-Lösung interessiert sind:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my @array =
(
{ utterance => 'ja', score => 0.27 },
{ utterance => 'nein', score => 0.75 },
{ utterance => 'nein', score => 0.83 },
{ utterance => 'ja', score => 0.53 },
{ utterance => 'ja', score => 0.69 },
{ utterance => 'nicht wirklich', score => 0.59 },
);

my %result;

for my $elem(@array){
my $key = $elem->{utterance};
my $score = $elem->{score};
$result{$key} = {score => 0, max_score => 0, min_score => 10_000} unless exists $result{$key};
$result{$key}->{score} += $score;
if($result{$key}->{max_score} < $score){
$result{$key}->{max_score} = $score;
}

if($result{$key}->{min_score} > $score){
$result{$key}->{min_score} = $score;
}

}

print Dumper(\%result);


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
~/entwicklung 135> perl scores.pl 
$VAR1 = {
'nein' => {
'max_score' => '0.83',
'score' => '1.58',
'min_score' => '0.75'
},
'nicht wirklich' => {
'max_score' => '0.59',
'score' => '0.59',
'min_score' => '0.59'
},
'ja' => {
'max_score' => '0.69',
'score' => '1.49',
'min_score' => '0.27'
}
};
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 5 Einträge, 1 Seite



View all threads created 2006-12-15 16:53.