Как использовать несколько агрегатных функций с несколькими / вложенными таблицами? - PullRequest
0 голосов
/ 02 марта 2012

У меня есть проблема, похожая на несколько функций agg , с той разницей, что я покрываю более одной таблицы:

Я хочу объединить в два раза по набору таблиц (см. Схему внизу):

Текущий неверный результат: (Во втором столбце фактически перечислены элементы третьего столбца.)

АВТОМАТИЗИРОВАТЬ 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, координировать, предсказать ...).
Набор отношений определяет одно использование фразы глагола и обозначается одной строкой с подсчитанной частотой (но неверно).

Вывод текущего запроса (неверно): Current output of other rows

Ответы [ 2 ]

0 голосов
/ 05 марта 2012

Я наконец нашла ответ:

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 голосов
/ 02 марта 2012

Мне кажется, что проблема в том, что вы хотите считать по «отношению», а вместо этого вы считаете по 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...