Perl & MySQL - Как получить топ 100 наиболее часто используемых полей (содержащих число) из столбца в таблице? - PullRequest
0 голосов
/ 02 мая 2011

У меня есть таблица с ~ 100 000 строк.

Я пытаюсь распечатать на экране наиболее часто используемые "type_num" из столбца.

Таким образом, если 2362 появляется 1000 раз в столбце type_num, который является наиболее используемым типом, а 1234 используется 987 раз и т. Д., Я получаю список desc наиболее часто используемых type_num.

Не повезло. Вот моя попытка новичка:

 my $mostused = DBI->connect("$thedb","$user","$password") or die "Connection Error: $DBI::errstr\n";

  my $getfreq = $mostused->prepare(qq{SELECT `type_num` count(*) FROM `productstable` GROUP BY `type_num` ORDER BY count(*) DESC LIMIT 10}); ##just tested with 10

    $getfreq->execute() or die "Connection Error: $DBI::errstr\n";

    while(my ($type_num) = $getfreq->fetchrow_array()) {
    print qq~$type_num<br />~;
    }

    $getfreq->finish(); #not sure if correct
    $mostused->disconnect;  #not sure if correct

Ошибка подключения: у вас есть ошибка в ваш синтаксис SQL; проверьте руководство, которое соответствует вашему серверу MySQL версия для правильного использования синтаксиса около 'count (*) ИЗ `productstable` GROUP BY `type_id` ORDER BY count (*) DESC LIMIT 10 'в строке 1

type_num - это число от 1 до 5 цифр. (Используя DBI и строгий, но этот пример очищен.) Я пробовал несколько вариантов и примеров, которые я нашел при поиске здесь, но я делаю что-то не так. пожалуйста, помогите.

1 Ответ

2 голосов
/ 02 мая 2011

Изменение

SELECT `type_num` count(*) 
FROM `productstable` GROUP BY `type_num` 
ORDER BY count(*) DESC LIMIT 100

Для

SELECT `type_num`, count(*) as cnt 
FROM `productstable` GROUP BY `type_num` 
ORDER BY cnt DESC LIMIT 100

Запятая после type_num + псевдоним для count(*) для повторного использования в ORDER BY.

...