15

コメント数 > 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 行で返すクエリが必要です。このクエリを変更して正しいデータを生成する方法がわかりません。

4

2 に答える 2

15

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

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
于 2012-04-05T04:26:44.657 に答える
10

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;

これにより、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
于 2012-04-05T04:16:16.290 に答える