Sql查询:列值的共现

dev*_*evj 6 sql hive

我有一张这样的表:

col1     col2
id1      item1
id1      item2
id1      item3
id2      item1
id2      item4
id3      item2
id3      item3
Run Code Online (Sandbox Code Playgroud)

我必须在这个表上运行一个查询来找到每对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 
Run Code Online (Sandbox Code Playgroud)

谢谢

Dav*_*itz 6

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
Run Code Online (Sandbox Code Playgroud)
+--------+--------+-----+
| item_a | item_b | cnt |
+--------+--------+-----+
| item1  | item2  |   1 |
| item1  | item3  |   1 |
| item1  | item4  |   1 |
| item2  | item3  |   2 |
+--------+--------+-----+
Run Code Online (Sandbox Code Playgroud)