我为下面的理论“ 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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
要实现您的查询需求,您需要编写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子句。