web-dev-qa-db-ja.com

MySql Select、Count(*)、SubQueries in Users <> Commentsリレーション

コメント数> 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;

すべて問題ありません。すべてのユーザーが正しく表示されます。しかし、1行でこれらすべてのユーザーの数量を返すクエリが必要です。このクエリを変更して正しいデータを生成する方法がわかりません。

11
WesternTune

これはあなたが探しているものだと思います:

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
12
Mosty Mostacho

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;

これにより、commsments_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
5
Dan P