2011-05-02 101 views
0

我有一個約100,000行的表格。Perl&MySQL - 如何從表中的列中獲得排名前100的最常用字段(包含數字)?

我試圖從列中打印以篩選最常用的「type_num」。

因此,如果2362在type_num列中出現1000次,這是最常用的類型,而1234使用了987次等等,我得到一個最常用的頻率爲type_num的desc列表。

沒有運氣。這是我的新手嘗試:

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 

Connection Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'count(*) FROM `productstable` GROUP BY `type_id` ORDER BY count(*) DESC LIMIT 10' at line 1

的type_num的是1至5位數字。 (使用DBI和嚴格的,但這個例子被清理。) 我嘗試了幾個變化和例子,當我在這裏搜索時發現,但是,我做錯了什麼。請幫忙。

+3

你錯過了什麼逗號? – Timmy 2011-05-02 18:05:32

+0

@Timmy:這是一個答案,而不是一個評論:) – ysth 2011-05-02 18:09:02

+0

什麼是'type_num'? – snoofkin 2011-05-02 18:09:10

回答

2

變化

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重用後。

+0

嘗試'SELECT'' type_num \',count(*)作爲cnt FROM \'productstable \'GROUP BY \'type_num \'ORDER BY cnt DESC LIMIT 100',但是,您在+別名後用逗號表示什麼? – Stephayne 2011-05-02 18:17:38

+0

工作!任何方式來顯示計數? – Stephayne 2011-05-02 18:25:10

+0

明白了!只需在循環中插入另一個查詢!謝謝! – Stephayne 2011-05-02 19:11:17

相關問題