2012-04-05 28 views
4

我有一個任務來計算具有評論計數的用戶數量> X.MySql的選擇,COUNT(*),並在用戶中的子查詢<>註釋關係

我的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; 

一切正常,它顯示所有用戶正確。但我需要查詢返回所有這些用戶的數量與一行。我不知道如何改變這個查詢來使它產生正確的數據。

+0

「所有這些用戶一行」?您能否以您的數據爲例更新問題,以及您想要什麼作爲實際產出。 – 2012-04-05 04:08:21

+0

我的意思是我只需要代表符合這些標準的所有用戶的數字。這就像將所有這些SQL包裝到另一個: SELECT COUNT(CURRENT_WORKING_SQL)AS total_user_count; – WesternTune 2012-04-05 04:16:25

回答

3

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; 

使用組這會給你一個計數每個users.id的,有commments_count> 150

爲你獲得的總的評論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 
+0

感謝您的回答,但實際上,無論何時我用戶GROUP語句或結果都沒有更改。剛剛檢查我的數據庫與「comments_count> 1」。在這兩種情況下,我都有807個用戶。 順便說一下,這並不能解決在一行中得到結果的問題。 – WesternTune 2012-04-05 04:23:34

+0

用最後一個查詢重新檢查,如果這是你的意思一行 – 2012-04-05 04:25:26

+0

是的,謝謝,檢查。在我輸入評論時沒有看到您的更新。 ... – WesternTune 2012-04-05 04:26:42

7

我覺得這是你要尋找的所有用戶數:

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 
+0

不,它返回每個用戶的評論數量。我有2個用戶只有這樣的標準。 而這個查詢返回2個數字: 「270」,「384」 當我只需要一個數字:2(用戶數量); – WesternTune 2012-04-05 04:37:47

+0

哦,明白了。更新了我的答案。 – 2012-04-05 04:43:45