mysql - SQL 与自身连接

标签 mysql sql

我有一张表格,其中包含人员的 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/

相关文章:

php - 使用 php mysql 上传文件并将文件名按列保存在数据库中

MySQL 查询两行为一

php - 请将 SQL 查询与 PHP 帮助合并

mysql - 使用给定的非常规范化的表编写查询 - 在采访中被问及

sql - 在哪里定义oracle包中的默认值

php - 无法在我的导航栏的下拉菜单中传递 id

mysql - 如何在 SUM 生成的列上找到 MAX 值

php - 我的 mysql delete 语句有什么问题?

mysql - 即使创建表的语法正确,我的 sql 中仍出现错误 1064

sql - 如何查找数据库中存在的存储过程、表和函数的数量