[英]SQL join with self
我有一張桌子,上面有人的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的總數。 對於以上示例,答案應為:
“result_table”
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;
觀看演示
就像您說的那樣,您可以進行自我加入。 您可以按food
加入,並計算distinct
匹配ID的數量。
select
a.id, -- Person you're investigating
count(distinct b.id) as samefoodcount -- number of people sharing the same food
from
food_id a
inner join food_id b on b.food = a.food
group by
a.id
在這里您可以看到正在使用的查詢: http : //sqlfiddle.com/#!2/c53884/1
您可以運行以下查詢以獲取所需的輸出:
select MAX(T.total),id
from table_name, (select count(*) as total,food from table_name group by food) T
where table_name.food=T.food
group by id
檢查演示
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.