SQL:连接表中两个项目一起出现的次数

时间:2014-07-14 03:48:09

标签: sql sqlite

如果有一个包含两列的SQL连接表,例如称为" Foods People Like":

PersonID | FoodID

1 1

1 2

2 1

2 2

3 3

4 3

4 1

PersonID和FoodID都指向不同的表,其中这些值是主键。

我希望得到两个项目作为食物一起出现的次数。因此,例如在我上面提供的列表中,食物1-2的组合将发生两次,而1-3将发生一次。

感谢大家的帮助。我通常是一个相当不错的SQL家伙,但这个让我难过。这是在SQLite DB中。

2 个答案:

答案 0 :(得分:2)

如果你只想要配对,那么你可以通过自我加入和group by进行此操作:

select pf1.foodid, pf2.foodid, count(*)
from personfoods pf1 join
     personfoods pf2
     on pf1.personid = pf2.personid and
        pf1.foodid < pf2.foodid
group by pf1.foodid, pf2.foodid;

此版本假定表中没有重复的行。如果有,您可以使用count(distinct personid)代替count(*)

答案 1 :(得分:0)

您可以使用条件分组,如下所示:

SELECT 
    CASE 
        WHEN FoodID <  PersonID THEN FoodID
        Else PersonID
    END FoodID,
    CASE 
        WHEN FoodID <  PersonID THEN PersonID
        Else FoodID
    END PersonID,
    count(*)
FROM mytable
GROUP BY
CASE 
    WHEN FoodID <  PersonID THEN FoodID
    Else PersonID
END,
CASE 
    WHEN FoodID <  PersonID THEN PersonID
    Else FoodID
END;

<强>参考

Conditional grouping clause (sqlite) on SO