Sql Query:列值的共同出现

时间:2017-04-10 11:40:11

标签: sql hive

我有一张这样的表:

col1     col2
id1      item1
id1      item2
id1      item3
id2      item1
id2      item4
id3      item2
id3      item3

我必须在此表上运行查询,以查找每对items共享一个公共id的次数。例如,在上述情况下,(item1, item2)对的计数为1(只有id1同时包含item1和item2)。同样,对(item2, item3)的计数为2(id1,id3)。

我可以编写代码来实现这一点,但我无法使用sql查询。帮我写一个有效的查询来输出以下内容:

col1    col2    count   
item1   item2    1
item1   item3    1
item1   item4    1
item2   item3    2 

由于

2 个答案:

答案 0 :(得分:2)

您可以使用自我加入来执行此操作:

select t1.col2, t2.col2, count(*)
from t t1 join
     t t2
     on t1.col1 = t2.col1
where t1.col2 < t2.col2
group by t1.col2, t2.col2;

答案 1 :(得分:2)

select    t1.col2  as item_A
         ,t2.col2  as item_B
         ,count(*) as cnt

from                mytable t1 
          join      mytable t2
          on        t1.col1 = t2.col1

where     t1.col2 < t2.col2

group by  t1.col2
         ,t2.col2
+--------+--------+-----+
| item_a | item_b | cnt |
+--------+--------+-----+
| item1  | item2  |   1 |
| item1  | item3  |   1 |
| item1  | item4  |   1 |
| item2  | item3  |   2 |
+--------+--------+-----+