使用从一个表到另一个表的COUNT(*)值

时间:2016-12-21 21:56:46

标签: mysql

假设我有两个表,用户和帖子。帖子有以下字段,userid,postid等,userid可以多次出现,因为一个用户可以写多个帖子....我只是根据posts表中每个userid的出现次数排序用户表。我可以使用此

获取每个用户的出现次数
    SELECT userid, COUNT(*) 
    FROM posts
    GROUP BY userid; 

我想使用COUNT(*)列下的值,也许可以将它添加到我的其他表中,因为那时我可以简单地使用这样的

  SELECT * FROM users
  ORDER BY newcolumn ASC;  

但我在做这件事时遇到了麻烦。或者我可以在不添加额外列的情况下执行此操作吗?请提示。谢谢

4 个答案:

答案 0 :(得分:4)

Left join是关键所在!

SELECT users.userid,count(posts.userid) AS total_count
FROM users
LEFT JOIN posts on posts.userid = users.userid
GROUP BY users.userid
ORDER BY total_count DESC;

我们将left join放在具有相同user_id的两个表格上,我们使用group by计算每位用户的帖子总数。最后sort按计数显示结果。

答案 1 :(得分:2)

尝试left join

operator[]

答案 2 :(得分:1)

您想要选择用户(COUNT(*) FROM posts),但您希望根据另一个表格(JOIN)中的条件进行排序 - 因此您需要使用SELECT users.* FROM users JOIN ( SELECT userid, COUNT(*) as count FROM posts GROUP BY userid ) as subquery ON users.id = subquery.userid ORDER BY subquery.count

副手我似乎无法回想起#34; JOIN"或" RIGHT JOIN"或者"完全加入"如果您想获得表格的笛卡尔积,然后在单个字段上进行分组和聚合,那么您就需要这些,但我可以避免需要记住子查询(希望有人会很快发布更小更聪明的答案):

JOIN

注意:我还没有对此查询进行过测试,但它看起来不错。再说一遍:希望有人会尽快发布更好的答案,因为我没有尽职尽责,但你肯定需要一个# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /wp/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /wp/index.php [L] </IfModule> # END WordPress :)

答案 3 :(得分:1)

您可以将post_count列添加到users表中,但每次用户创建新帖子时您还必须更新该计数列,并且必须将该逻辑构建到您的应用程序中。

否则,看起来FallAndLearn的答案会为您提供所需的信息。