我对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
数据库架构:
一个动词(短语)包含多组终端(=单词)。
实际单词不会出现在此结果中,只会出现与动词的语法关系(HD,agt,coordin,predic ...)。
一组关系定义动词短语的一种用法,并由一行表示,频率计算(但错误)。
输出当前查询(错误):
答案 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;