使用SQL查找男性和女性朋友的数量

时间:2014-10-13 20:50:12

标签: sql oracle

我使用的是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

我很感激帮助。

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.Idf.Id的数量不同的原因是,当FRIENDS的一行加入男性朋友时,f.Id将为NULL },反之亦然。 COUNT跳过NULL个值,产生您需要的计数。