2016-05-12 2 views
0

Я пытаюсь выполнить подсчет по нескольким, связанным таблицам:MySQL - граф по таблицам

select 
    vpp.Name 
    ,count(sx.Occurences) as sx_Occurences 
    ,count(vpp.Occurences) as vpp_Occurences 
    ,count(sd.Occurences) as sd_Occurences 
from v_p vpp 
    left outer join s_x sx on sx.ID = vpp.ID 
    left outer join s_d sd on sd.ID = vpp.ID 
    group by vpp.Name 

Это, однако, дает мне неправильные результаты (делает подсчет на одном столе только работает, но как только я добавить второй (или третий, четвертый ...) числа неверны

+0

Может быть, у вас есть s_x или s_d вхождения, которые не находятся в v_p? –

ответ

0

Я считаю, что вы ищете это:.

SELECT vpp.Name, 
     (SELECT count(sx.Occurences) FROM s_x WHERE s_x.ID = vpp.ID) as sx_Occurences, 
     count(vpp.Occurences) as vpp_Occurences, 
     (SELECT count(sd.Occurences) FROM s_d WHERE s_d.ID = vpp.ID) as sd_Occurences 
    FROM v_p vpp 
GROUP BY vpp.Name; 
0

вы, наверное, 1: п связь между, по меньшей мере, 2 из 3 таблицы. он даст вам больше записей, чем если бы вы учитывали записи по каждой таблице отдельно.

Если вы хотите, чтобы сосчитать различные значения заданных полей, а затем использовать счетчик (отчетливый ...):

select 
    vpp.Name 
    ,count(distinct sx.Occurences) as sx_Occurences 
    ,count(distinct vpp.Occurences) as vpp_Occurences 
    ,count(distinct sd.Occurences) as sd_Occurences 
from v_p vpp 
    left outer join s_x sx on sx.ID = vpp.ID 
    left outer join s_d sd on sd.ID = vpp.ID 
    group by vpp.Name 

В противном случае, вам нужно сделать подсчет индивидуально каждым столом. Вы можете комбинировать 3 запроса в качестве подзапросов:

select 
    t1.Name 
    ,sx_Occurences 
    ,vpp_Occurences 
    ,sd_Occurences 
from 
    (select name, id, count(vpp.Occurences) as vpp_Occurences 
    from v_p vpp 
    group by name, id) t1 
    left outer join 
    (select id, count(sx.Occurences) as sx_Occurences 
    from s_x sx 
    group by id) t2 on t1.ID = t2.ID 
    left outer join 
    (select id, count(sd.Occurences) as sd_Occurences 
    from s_d sd 
    group by id) t3 on t1.ID = t3.ID 
Смежные вопросы