如果有一个包含两列的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中。
答案 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;
<强>参考强>: