2013-12-13 5 views
0

Это, вероятно, довольно просто, но я не могу понять это. Вот таблицы, с которыми я работаю.Подсчитайте строки, которые имеют одинаковый набор связанных записей.

TABLE_A

id other_data 
------------- 
1  blah 
2  foo 
3  bar 

TABLE_B

ref_a ref_c 
------------- 
1  1 
1  2 
2  3 
3  3 

table_c

id name 
---------- 
1 TestA 
2 TestB 
3 TestC 

То, что я пытаюсь получить что-то вроде этого, где я подсчета числа строк (TABLE_A), которые имеют одинаковый набор дочерних элементов (table_b). Я также хочу иметь возможность получать связанные данные из другой таблицы (Имя из таблицы_c).

TestA,TestB 1 
TestC  2 

Я знаю, что это, вероятно, использует Group By и GROUP_CONCAT, но я не могу получить эту работу.

Я пробовал это, но он не работает.

ВЫБОР GROUP_CONCAT (DISTINCT table_c. name сепаратор '') как 'combo_text', COUNT (DISTINCT table_a. id) ОТ table_a INNER JOIN table_b на table_a. id = table_b. ref_a INNER JOIN table_c table_c. id = table_b. ref_c ГРУППА ПО table_b. ref_a

+1

Отформатируйте ваш вопрос лучше (ваш пример данных и пример вывода) – apartridge

+0

Не могли бы вы также отредактировать свой вопрос, чтобы включить то, что вы пробовали, что не сработало, за [Stack Overflow [Хорошие вопросы?]) (Http://stackoverflow.com/help/on-topic)? – Derek

ответ

2
SELECT a.id, count(a.id) as count, GROUP_CONCAT(name) as names 
FROM table_a a 
JOIN table_b b ON (a.id = b.ref_a) 
JOIN table_c c ON (b.ref_c = c.id) 
GROUP BY a.id 

sqlFiddle demo

на основе вашего результата вы хотите что-то вроде этого

SELECT names, count(count) as count FROM 
    (SELECT a.id, count(a.id) as count, GROUP_CONCAT(name) as names 
    FROM table_a a 
    JOIN table_b b ON (a.id = b.ref_a) 
    JOIN table_c c ON (b.ref_c = c.id) 
    GROUP BY a.id 
)T1 
GROUP BY names 

sqlFiddle demo

+0

Спасибо! Вы получили правильный ответ, прежде чем я закончил исправление моего вопроса lol. –

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