计算具有相同记录集的行

时间:2013-12-13 22:12:38

标签: mysql group-by group-concat

这可能很简单,但我无法弄清楚这一点。以下是我正在使用的表格。

表-A

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

表-B

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

table_c

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

我想要的是这样的,我在计算具有相同子集(table_b)的行数(table_a)。我还希望能够从另一个表中获取相关数据(table_c中的名称)。

TestA,TestB 1
TestC       2

我知道它可能使用Group By和GROUP_CONCAT但我无法使用它。

我尝试了这个,但它不起作用。

SELECT GROUP_CONCAT(DISTINCT table_cname separator',')as'combo_text',COUNT(DISTINCT table_aid)   来自table_a     INNER JOIN table_b       在table_aid = table_bref_a     INNER JOIN table_c       在table_cid = table_bref_c     GROUP BY table_bref_a

1 个答案:

答案 0 :(得分: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