Выберите вопрос вопроса

0

У меня есть таблица в mysql-базе данных с полями

"name", "title", "cd_id", "tracks"

Записи выглядят следующим образом:

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), я написал этот 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;

Можно ли получить эти результаты напрямую с помощью соответствующего запроса выбора?

Теги:
dbi

2 ответа

2
Лучший ответ
"SELECT cd_id, SUM(tracks) as tracks FROM my_table GROUP BY cd_id"

edit: см. здесь для получения дополнительной информации и других вещей, которые вы можете сделать с GROUP BY: http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

-2

использовать агрегированную функцию

  SELECT `cd_id`, SUM(`tracks`) AS s
    FROM `your_table`
GROUP BY `cd_id`
  • 0
    count получит количество строк для каждого cd_id, а не сумму столбца track.
  • 0
    Вы не можете использовать SUM (*), вам нужно указать столбец, который вы хотите суммировать.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню