如何在SQL中执行多对多关系聚合?

时间:2016-06-23 14:34:40

标签: sql aggregate aggregate-functions

我有数据,其中COLUMN_A中的一个值可以对应于COLUMN_B中的许多值,反之亦然。一个小例子:

 COLUMN_A  | COLUMN_B
 ===================
     A     |    X
     A     |    Y
     A     |    Z
     B     |    Y
     B     |    Y
     C     |    X
     C     |    X
     D     |    X
     D     |    Z
     D     |    Z

我希望看到COLUMN_A中有多少个唯一实例对应于COLUMN_B中的唯一实例。所以我希望我的输出像这样:

 COLUMN_B | # INSTANCES OF COLUMN_A | VALUES IN COLUMN_A
 =======================================================
     X    |            3            |         A    
     X    |            3            |         C    
     X    |            3            |         D 
 -------------------------------------------------------  
     Y    |            2            |         A   
     Y    |            2            |         B
 -------------------------------------------------------
     Z    |            2            |         A  
     Z    |            2            |         D  

我似乎无法弄清楚它是否是GROUP BY,一种JOIN,或两者的某种组合。

谢谢。

3 个答案:

答案 0 :(得分:3)

按表中的column_b聚合并将其连接到原始表以获取column_a中的相应值。

php

答案 1 :(得分:1)

使用相关的子查询进行计数:

select distinct column_b,
                (select count(distinct ca) from tablename t2
                 where t1.column_b = t2.column_b),
                column_a
from tablename t1
order by column_b, column_a;

答案 2 :(得分:0)

使用简单分区

false