2016-04-19 4 views
0
SELECT tablea.z, count(tablea.z), count(tableb.y) 
FROM tablea 
JOIN tableb 
ON tablea.y = tableb.y 
GROUP BY tablea.z; 

Я пытаюсь в конечном итоге получить count(tableb.y)/count(tablea.z).SQL Присоединиться к двум таблицам

Каждый из них отлично работает, когда я нахожу их индивидуально, но когда я присоединяюсь к столам, как показано выше, count(tablea.z) превращается в count(tableb.y).

Любые советы?

+1

Это потому, что список SELECT уже выполнил соединение и возвратил объединенный набор ... таким образом, оба счета возвращают число строк, полученных в результате соединения. Есть несколько способов обойти это ... знание того, с каким SQL-движком вы работаете. – jleach

+1

Можете ли вы показать нам пример ввода и вывода проб? –

+0

@ jdl134679 MySQL 5.6 – nquestion

ответ

0

Вы должны быть в состоянии оценить отсчеты 2 таблицы независимо друг от друга:

я, возможно, что вы пытаетесь считать неправильно, но я надеюсь, что это помогает дать вам представление о том, что происходит

select 
    a.z, a.numrows/b.numrows as calc -- perhaps some error checking to avoid /0 error 
from (select z, count(*) as numrows from tablea group by z) as a 
    join 
(select z, count(*) as numrows from tableb group by z) as b 
    on a.z = b.z 
+0

Я думаю, что 'count (*)' часть неверна, потому что я не пытаюсь считать все строки, но могу ли я просто заменить это? Также, когда вы говорите 'select z' или' group by z', я должен указать 'a.z' и т. Д.? – nquestion

+0

Да, поэтому (выберите z, count (*) в виде чисел из группы tablea на z) может быть любым, что вы пытаетесь подсчитать там. То, что вы ищете в этом бите, это 2 столбца, z и все, что вы считаете. – LordBaconPants

+0

Я должен добавить, что count просто даст вам количество строк. так что вам нужно использовать оператор where, если вы это делаете, или SUM, если вы пытаетесь добавить значения в столбце вместе, это действительно зависит от того, что вы пытаетесь сделать там – LordBaconPants

Смежные вопросы