我有一张这样的表:
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
由于
答案 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 |
+--------+--------+-----+