我有一张表格,其中包含人员的 ID 号以及他们订购的食物:
表“food_id”
food id
ham 1
cheese 2
turkey 2
ham 3
ham 4
bread 5
cheese 6
turkey 6
cheese 7
而且我想使用 SQL 计算出,对于每个 ID,订购至少一种相同食品的其他 ID 的总数。对于上面的例子,答案应该是:
“结果表”
count id
3 1
3 2
3 3
3 4
1 5
3 6
3 7
这里的挑战是避免重复计算。例如,第 2 个人得到了奶酪和火鸡,所以我们希望他的最终计数为 3,因为第 2、6 和 7 个人得到了奶酪,而第 2 和 6 个人得到了火鸡,并且这里有 3 个唯一 ID (2,6,7,2,6) 的列表。
我最初的想法是首先获得一个包含不同 ID 编号的食品表,然后将此表与原始表连接起来,然后按 ID 编号分组并计算不同 ID 的数量。但是,我是 SQL 的初学者,不知道如何正确地实现代码。
任何方向将不胜感激。
最佳答案
为避免重复计数问题,您可以从连接中连接两个 ID,并仅计算不同的组合。我添加了一个分隔符,使组合具有更大的 id 值:
SELECT
COUNT(DISTINCT CONCAT(f1.id, ',', f2.id)) as count,
f1.id
FROM
food_id f1
INNER JOIN
food_id f2
ON
f1.food = f2.food
GROUP BY f1.id;
参见 demo
关于mysql - SQL 与自身连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25821411/