我使用的是Oracle(SQL * Plus),目前我有以下表格:
USERS:
Id|Name|Gender
1 |A |M
2 |B |F
3 |C |M
4 |D |F
FRIENDS
Id1|ID2
1 |2
1 |3
2 |3
2 |4
2 |1
3 |1
3 |2
4 |2
我如何查询,"对于每个用户,找到男性和女性朋友的数量?" 我需要一个如下所示的输出:
Id|Male Friends|Female Friends
1 |1 |1
2 |2 |1
3 |1 |1
4 |0 |1
我很感激帮助。
答案 0 :(得分:2)
使用两个外部联接进行查询 - 一个是男性朋友,另一个是女性朋友。按用户ID分组:
SELECT u.Id, COUNT(m.Id) as MaleFriends, COUNT(f.Id) as FemaleFriends
FROM Users u
LEFT OUTER JOIN Friends ff ON u.Id=ff.Id1
LEFT OUTER JOIN Users m ON ff.Id2=m.Id AND m.Gender='M'
LEFT OUTER JOIN Users f ON ff.Id2=f.Id AND f.Gender='F'
GROUP BY u.Id
m.Id
和f.Id
的数量不同的原因是,当FRIENDS
的一行加入男性朋友时,f.Id
将为NULL
},反之亦然。 COUNT
跳过NULL
个值,产生您需要的计数。