我有3张桌子:
t_user(ID,名称)
t_user_deal(id,user_id,deal_id)
t_deal(id,标题)
多个用户可以链接到同一笔交易。 (我使用的是oracle,但应该类似,我可以进行调整)
如何获得所有与他打交道的唯一用户数的用户(名称)。
让我们用一些数据来解释:
t_user:
id, name
1, joe
2, mike
3, John
t_deal:
id, title
1, deal number 1
2, deal number 2
t_user_deal:
id, user_id, deal_id
1, 1, 1
2, 2, 1
3, 1, 2
4, 3, 2
我期望的结果:
user_name,与之交易的唯一用户数
乔2
迈克1
约翰1
我已经尝试过了,但是没有得到预期的结果:
SELECT tu.name,
count(tu.id) AS nbRelations
FROM t_user tu
INNER JOIN t_user_deal tud ON tu.id = tud.user_id
INNER JOIN t_deal td ON tud.deal_id = td.id
WHERE
(
td.id IN
(
SELECT DISTINCT td.id
FROM t_user_deal tud2
INNER JOIN t_deal td2 ON tud2.deal_id = td2.id
WHERE tud.id <> tud2.user_id
)
)
GROUP BY tu.id
ORDER BY nbRelations DESC
谢谢你的帮助
最佳答案
这应该给你结果
SELECT id1, count(id2),name
FROM (
SELECT distinct tud1.user_id id1 , tud2.user_id id2
FROM t_user_deal tud1, t_user_deal tud2
WHERE tud1.deal_id = tud2.deal_id
and tud1.user_id <> tud2.user_id) as tab, t_user tu
WHERE tu.id = id1
GROUP BY id1,name