2012-03-02 112 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