我有一个表users
,在我的另一个表usersHaveSocialMediaFans
中有一个外键。
usersHaveSocialMediaFans
有列:
socialMediaId, userId, fanCount
我需要查找每个社交媒体的粉丝数量大于(或小于)特定金额的所有用户。管理员需要能够筛选出可能拥有至少6位Facebook粉丝和7位Twitter粉丝的所有用户。
当我在用户表中显示此信息时,这非常简单:
userId, ..., facebookFans, twitterFollowers, ...
---0--, ---, -----10-----, ------1000------, ...
然后,我可以SELECT userId from users WHERE facebookFans > # AND twitterFollowers > #;
但是,现在我的每个用户的数据被分成多行,我不知道如何处理逻辑。我觉得必须有一个简单的答案,但我现在想不起来。
答案 0 :(得分:2)
一种方法
SELECT U.userId, F.SocialMediaID, F.fanCount from users U
LEFT JOIN usersHaveSocialMediaFans F
ON F.Userid = U.Userid
WHERE (F.SocialMediaID='Facebook' and Fancount>1000)
And (F.SocialMediaID='Twitter' and Fancount>1000)
另一种方法:
SELECT U.userId, F.fanCount "FacebookFan", t.fanCount "TwitterFan" from users U
LEFT JOIN usersHaveSocialMediaFans F
ON F.Userid = U.Userid and F.SocialMediaID= 'Facebook'
LEFT JOIN usersHaveSocialMediaFans T
ON T.Userid = U.Userid and T.SocialMediaID= 'Twitter'
WHERE F.FanCount > 1000 and T.FanCount > 1000
答案 1 :(得分:1)
您需要JOIN
两次usersHaveSocialMediaFans
表格。{p>例如,如果您想要拥有超过1,000名Facebook粉丝和超过10位Twitter粉丝的人,您可以执行以下操作:
Select Distinct U.UserId
From Users U
Join usersHaveSocialMediaFans F On F.UserId = U.UserId
And F.socialMediaId = <FacebookSocialMediaId>
Join usersHaveSocialMediaFans T On T.UserId = U.UserId
And T.socialMediaId = <TwitterSocialMediaId>
Where F.fanCount > 1000
And T.fanCount > 10;
如果您有另一个存储每个平台的SocialMediaId名称的表格,那么您应该在JOIN
处执行另一个SocialMediaId
,而不是在每个平台的SocialMedia
中进行硬编码。但我不知道你的架构,所以希望这会指引你朝着正确的方向发展。
如果假设您有另一个名为SocialMediaId
的表格,其中包含每个平台的Name
和Select Distinct U.UserId
From Users U
Join usersHaveSocialMediaFans F On F.UserId = U.UserId
Join SocialMedia SF On SF.SocialMediaId = F.SocialMediaId
And SF.Name = 'Facebook'
Join usersHaveSocialMediaFans T On T.UserId = U.UserId
Join SocialMedia ST On ST.SocialMediaId = T.SocialMediaId
And ST.Name = 'Twitter'
Where F.fanCount > 1000
And T.fanCount > 10;
,则可以执行以下操作:
build
希望这有帮助!