2012-03-02 109 views
0

我有一個問題similare到multiple agg functions,與我覆蓋多個表的區別:如何使用多個聚合函數與多個/嵌套表?

我想要聚合兩倍以上一組表(見架構在底部):

當前錯誤的結果: (第二列實際上計算第三列的項目。)

АВТОМАТИЗИРОВАТЬ 2 HD,agt 
АВТОМАТИЗИРОВАТЬ 2 HD,coordin 
АВТОМАТИЗИРОВАТЬ 2 HD,coordin 
АВТОМАТИЗИРОВАТЬ 5 circum,predic,HD,1-compl,-- 
АВТОМАТИЗИРОВАТЬ 2 predic,HD 
АВТОМАТИЗИРОВАТЬ 3 predic,circum,HD 

期望的結果:

АВТОМАТИЗИРОВАТЬ 1 HD,agt 
АВТОМАТИЗИРОВАТЬ 2 HD,coordin 
АВТОМАТИЗИРОВАТЬ 1 circum,predic,HD,1-compl,-- 
АВТОМАТИЗИРОВАТЬ 1 predic,HD 
АВТОМАТИЗИРОВАТЬ 1 predic,circum,HD 

第一列是動詞。
第三列應指定第一列中動詞的用法。
第二列應該記錄此特定用法的發生次數。

select vp.verb, count(), group_concat(label.name) relation 
from vp, label, vp_terminal, terminal 
where label.idlabel==terminal.label_id 
and vp_terminal.vp_id==vp.idvp 
and vp_terminal.terminal_id==terminal.idterminal 
group by vp.verb, vp.idvp 
order by verb, relation 

數據庫模式: Database Schema 一個動詞(詞組)包含端子的多組(=字)。
實際的單詞不會出現在這個結果中,只有它們與動詞的語法關係(HD,agt,coordin,predic ...)。
一組關係定義了動詞短語的一種用法,並用一行表示,頻率已計數(但錯誤)。

當前查詢(錯誤)的輸出: Current output of other rows

回答

0

我找到了答案終於:

select verb, count(relation) count, relation 
from 
    (select vp.verb, group_concat(label.name) relation 
    from 
     vp, label, vp_terminal, terminal 
    where 
     label.idlabel==terminal.label_id 
     and vp_terminal.vp_id==vp.idvp 
     and vp_terminal.terminal_id==terminal.idterminal 
    group by vp.verb, vp.idvp 
    order by verb, relation) 
group by relation, verb 
order by verb asc, count desc; 
0

在我看來,一個問題是,要通過「關係」,而是你被idvp計數來計數。要做到這一點,我會分裂查詢:

select verb, count (*), relation 
from (select vp.verb, group_concat(label.name) relation 
from vp, label, vp_terminal, terminal 
where label.idlabel==terminal.label_id 
and vp_terminal.vp_id==vp.idvp 
and vp_terminal.terminal_id==terminal.idterminal 
group by vp.verb, vp.idvp) a 
order by verb, relation 
+0

謝謝,這也是一個點...... – 2012-03-03 11:26:23