![](/img/trans.png)
[英]How can I convert this SQL query using COUNT, SUM, CASE, and BETWEEN into Perl DBIx::Class?
[英]How can I output unique, count and sum using perl
我是Perl的新手。 我需要找到以下數據的唯一,計數和總和。 我請求你的幫助。
08/2009 I-111 300
08/2009 I-112 400
08/2009 I-113 500
10/2009 I-200 1000
10/2009 I-300 500
11/2009 I-300 100
11/2009 I-100 400
所以我需要找到這樣的
08/2009 3 1200
10/2009 2 1500
List::MoreUtils
uniq
返回List::MoreUtils
的唯一元素:
use List::MoreUtils 'uniq';
my @x = uniq 1, 1, 2, 2, 3, 5, 3, 4; # (1,2,3,5,4)
標量上下文中的列表表達式返回元素數。
my @array = (5,6,7,8);
my $a_count = @array; # 4
my %hash = ('x' => 1, 'y' => 2);
my $h_count = keys %hash; # 2
List::Util
sum
添加List::Util
的元素。
use List::Util 'sum';
my @array = (1,2,3,4,5);
print sum @array; # 15
不確定您到底想要什么,但是可以嗎?
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dump qw(dump);
my %h;
while(<DATA>) {
chomp;
my @el = split;
$h{$el[0]}{count}++;
$h{$el[0]}{sum} += $el[2];
}
dump%h;
__DATA__
08/2009 I-111 300
08/2009 I-112 400
08/2009 I-113 500
10/2009 I-200 1000
10/2009 I-300 500
11/2009 I-300 100
11/2009 I-100 400
輸出:
(
"08/2009",
{ count => 3, sum => 1200 },
"11/2009",
{ count => 2, sum => 500 },
"10/2009",
{ count => 2, sum => 1500 },
)
回復:M42的回答,試試:
use Data::Dumper;
print Dumper \%h;
或者你可以寫:
while (my ($key, $values) = each %h) {
print "$key $values->{count} $values->{sum}\n";
}
通常情況下,我不會為自由類型的東西編寫我的程序 ,但是因為M42已經完成了大部分工作,所以這里沒有Data::Dump
:
#!/usr/bin/perl
use strict;
use warnings;
my %h;
while(<DATA>) {
chomp;
my @el = split;
$h{$el[0]}->{count}++;
$h{$el[0]}->{sum} += $el[2];
}
foreach my $element (sort keys %h) {
printf "%-10.10s %-6.6s %4d\n", $element,
$h{$element}->{count}, $h{$element}->{sum};
}
__DATA__
08/2009 I-111 300
08/2009 I-112 400
08/2009 I-113 500
10/2009 I-200 1000
10/2009 I-300 500
11/2009 I-300 100
11/2009 I-100 400
現在學習一些Perl !
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.