给出以下SQLite表:
Name | Lived_in
----------------
John | Canada
John | UK
James | Canada
James | UK
Mary | UK
Mike | USA
是否有任何方法可以列出col_1(名称)中不同值形成的对,以及它们在col_2(Lived_in)中共享的值的数量,并按照后者排序?
在我的例子中,这将产生:
Node A | Node B | Shared values
-------------------------------
John | James | 2
John | Mary | 1
James | Mary | 1
注意:如果无法完成,我将接受一个答案,该答案返回所有具有共同X关系的对,其中我必须为每个请求指定X.
答案 0 :(得分:3)
我还建议进行内连接,但我会指定name
值不能相等
select t1.name as name1, t2.name as name2, count(*)
from table t1 inner join
table t2
on t1.Lived_in = t2.Lived_in
and t1.name > t2.name
group by t1.name,t2.name
请注意,在不等式运算符中使用>
而不是<>
来避免重复(John-James和James-John)
SQLFiddle:http://sqlfiddle.com/#!7/26a76/9
答案 1 :(得分:0)
您可以使用自加入和group by
:
select t1.name, t2.name, count(*)
from table t1 join
table t2
on t1.Lived_in = t2.Lived_in
group by t1.name, t2.name;