用户<>注释关系中的MySql Select,Count(*)和SubQueries

Wes*_*une 11 mysql sql subquery aggregate-functions

我有一项任务来计算具有评论数> X的用户数量.

我的SQL查询如下所示:

SELECT users.id,
       users.display_name, 
       (SELECT COUNT(*) 
          FROM cms_comments 
         WHERE cms_comments.author_id = users.id) AS comments_count 
  FROM users 
HAVING comments_count > 150;
Run Code Online (Sandbox Code Playgroud)

一切都很好,它正确显示所有用户.但我需要查询以一行返回所有这些用户的数量.我不知道如何更改此查询以使其生成正确的数据.

Mos*_*cho 12

我想这就是你要找的东西:

select count(*) from (
    select u.id from users u
    join cms_comments c on u.id = c.author_id
    group by u.id
    having count(*) > 150
) final
Run Code Online (Sandbox Code Playgroud)


Dan*_*n P 5

使用group by子句

SELECT users.id,
       users.display_name, 
       (SELECT COUNT(*) 
          FROM cms_comments 
         WHERE cms_comments.author_id = users.id) AS comments_count 
FROM users 
GROUP BY users.id, user.display_name
HAVING comments_count > 150;
Run Code Online (Sandbox Code Playgroud)

这将为您提供每个commments_count> 150的users.id,users.display_name的计数

关于获取用户总数的评论,最好是更新您的问题,但是如果要统计所有符合此条件的用户,请使用

SELECT COUNT(*) AS TotalNumberOfUsersMatchingCritera
FROM
(
    SELECT users.id,
           users.display_name, 
           (SELECT COUNT(*) 
              FROM cms_comments 
             WHERE cms_comments.author_id = users.id) AS comments_count 
    FROM users 
    GROUP BY users.id, user.display_name
    HAVING comments_count > 150;
) AS T
Run Code Online (Sandbox Code Playgroud)