sql查询:列值的共现

6ojccjat  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(182)

我有一张这样的table:

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

谢谢

koaltpgm

koaltpgm1#

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 |
+--------+--------+-----+
8qgya5xd

8qgya5xd2#

您可以使用自联接来执行此操作:

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;

相关问题