如何使用多个/嵌套表的多个聚合函数?

时间:2012-03-02 12:30:04

标签: sql sqlite

我对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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;