SQL:计算两个不同条目具有的值的数量

时间:2015-06-08 12:56:41

标签: sql sqlite

给出以下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.

2 个答案:

答案 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;