使用where子句获取mysql中最受欢迎的5个最值的值

时间:2015-01-15 00:20:26

标签: mysql

我正在开展一个项目,但我遇到了问题。我有一个名为friends的表,其中有三列idfrom_emailto_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

有什么想法吗?

我还希望让朋友按照他们的名字订购相同数量的粉丝。有可能吗?

2 个答案:

答案 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上定义了一个索引,这将表现得非常好。