2010-02-05 80 views
0

我有一個表在MySQL數據庫與領域選擇查詢的問題

「名」,「標題」,「cd_id」,「跟蹤」

的條目是這樣的:

Schubert | Symphonie Nr 7 | 27 | 2 
Brahms | Symphonie Nr 1 | 11 | 4 
Brahms | Symphonie Nr 2 | 27 | 4 
Shostakovich | Jazz Suite Nr 1 | 19 | 3

,讓每CD(cd_id)我寫這個劇本的軌道:

#!/usr/bin/env perl 
use warnings; use strict; 
use DBI; 

my $dbh = DBI->connect( 
    "DBI:mysql:database=my_db;", 
    'user', 'passwd', { RaiseError => 1 }); 

my $select_query = "SELECT cd_id, tracks FROM my_table"; 

my $sth = $dbh->prepare($select_query); 
$sth->execute; 

my %hash; 
while (my $row = $sth->fetchrow_hashref) { 
    $hash{"$row->{cd_id}"} += $row->{tracks}; 
} 

print "$_ : $hash{$_}\n" for sort { $a <=> $b } keys %hash; 

是否有可能直接與獲得這些結果ñ適當的選擇查詢?

回答

-1

使用聚合函數

SELECT `cd_id`, SUM(`tracks`) AS s 
    FROM `your_table` 
GROUP BY `cd_id` 
+0

計數將獲得的行數爲每cd_id,而不是軌道列的總和。 – 2010-02-05 13:31:53

+0

你不能使用SUM(*),你需要提供你想要總結的列。 – 2010-02-05 13:39:31

+0

嗯,你是對的 – knittl 2010-02-05 14:00:25