我正在开展一个项目,但我遇到了问题。我有一个名为friends
的表,其中有三列id
,from_email
和to_email
(它是一个社交网站,“from_email”是跟随“to_email”的人) 。我想要一个查询,根据他们的关注者数量返回我关注的前5位朋友。我知道前5的查询是:
SELECT
to_mail,
COUNT(*) AS friendsnumber
FROM
friends
GROUP BY
to_email
ORDER BY
friendsnumber DESC
LIMIT 5
有什么想法吗?
我还希望让朋友按照他们的名字订购相同数量的粉丝。有可能吗?
答案 0 :(得分:1)
您应该使用COUNT(from_email)
代替COUNT(*)
;因为您想要计算关注者的数量,由from_email
表示。
因此,您的select子句类似于:
SELECT to_email, COUNT(from_email) as magnitude
至于获得您关注的最受欢迎的人,您可以使用IN
子句:
WHERE to_email IN (SELECT to_email FROM friends WHERE from_email='MY_EMAIL');
关于name,您应该将此查询与包含name
值的其他表一起加入。
既然您现在已经掌握了必需品,我希望您可以尝试自己编写完整的查询=)
答案 1 :(得分:0)
再次加入第二层计数表:
SELECT f1.to_email
FROM friends f1
JOIN friends f2 on f2.to_mail = f1.to_email
WHERE f1.from_email = 'myemail'
GROUP BY 1
ORDER BY count(*) DESC
LIMIT 5
如果在to_email
上定义了一个索引,这将表现得非常好。