开发者社区 问答 正文

按性别,位置和朋友关系模拟Facebook SQL数据库查询?

我为下面的理论“ facebook” SQL数据库创建了一个模拟SQL数据库。我如何:

查询此信息以返回居住在加拿大的男性朋友的数量,以及返回给定用户的所有女性朋友的数量:A)返回两行的查询-每个数字返回一个,B)返回两行的1行的查询?

如果需要,我可以自己编辑表(添加/删除新列等)。有任何想法吗?

桌子 表1: ( Profile,userID,profile_URL,FirstName,LastName,Gender,Current_Location,)BirthdateAboutMe

表2: (Location,userID,city,country,)statezipcode

表3: (Page,pageID,pageURL,)pageNamelikedBy_userID

表4: (Photo,userID,URL,image,photoID,created_timestamp,)captionalbumID

表5: (FriendRelation,userID_1,)userID_2AreFriends

表6: (user_status,userID,statusID,status,)URLtimestamp

表7: (Visits,id,UserID,PageID,)URLVisited_Timestamp

展开
收起
保持可爱mmm 2019-11-18 09:49:14 502 分享 版权
阿里云 AI 助理回答

要实现您的查询需求,您需要编写SQL查询语句来连接这些表并筛选出符合条件的数据。首先,确保Gender列存在于Table1中,并且country列存在于Table2中,以便我们可以基于性别和国家进行过滤。

查询居住在加拿大的男性朋友的数量

这个查询需要从FriendRelation表出发,连接到Table1以获取性别信息,再连接到Table2以获取用户所在国家。假设男性用'M'表示:

SELECT COUNT(*) AS CanadianMaleFriends
FROM FriendRelation FR
JOIN Table1 T1 ON FR.userID_2 = T1.userID AND T1.Gender = 'M'
JOIN Table2 T2 ON T1.userID = T2.userID AND T2.country = 'Canada';

返回给定用户的所有女性朋友的数量

这里我们假设您已经有了一个特定的userID(用:userID表示),并且女性用'F'表示:

SELECT COUNT(*) AS FemaleFriendsOfGivenUser
FROM FriendRelation FR
JOIN Table1 T1 ON FR.userID_2 = T1.userID AND T1.Gender = 'F'
WHERE FR.userID_1 = :userID;

合并两个查询为单行返回

为了在一个查询中返回两行结果,您可以使用子查询或者UNION ALL,但直接返回一行两列可能更简洁:

SELECT 
    (SELECT COUNT(*) FROM FriendRelation FR
     JOIN Table1 T1 ON FR.userID_2 = T1.userID AND T1.Gender = 'M'
     JOIN Table2 T2 ON T1.userID = T2.userID AND T2.country = 'Canada') AS CanadianMaleFriends,
    (SELECT COUNT(*) FROM FriendRelation FR
     JOIN Table1 T1 ON FR.userID_2 = T1.userID AND T1.Gender = 'F'
     WHERE FR.userID_1 = :userID) AS FemaleFriendsOfGivenUser;

请根据实际表名和字段名调整上述SQL语句。如果表结构与描述不符,请相应地修改JOIN条件和WHERE子句。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答