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)
使用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)