2010-02-05 5 views
0

J'ai une table dans une base de données MySQL avec les champsSélectionnez la question requête

"name", "title", "cd_id", "pistes"

Les entrées ressemblent à ceci:

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

pour obtenir les pistes par cd (cd_id) Je vous ai écrit ce script:

#!/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; 

Est-il possible d'obtenir ces résultats directement avec un n sélectionner une requête appropriée?

Répondre

-1

utiliser une fonction d'agrégation

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

décompte obtenir le nombre de lignes pour chaque cd_id, pas la somme de la colonne des pistes. –

+0

vous ne pouvez pas utiliser SUM (*), vous devez fournir la colonne que vous voulez résumer. –

+0

hm, vous avez raison – knittl