2010-09-30 22 views
2

我有檢查一個表和組從一個用戶的所有條目,並計算這些條目Mysql - 計算有多少行有一定數量?

SELECT username, 
     count(userid) 
    FROM orders 
GROUP BY userid 

這將返回用戶名的名單和他們有多少訂單提交查詢

username count(userid) 
------------------------ 
test  1 
test2  1 
test3  3 
test4  3 
test4  3 
test4  3 

我希望查詢做的是計算有多少用戶有X訂單並返回該數字。

因此,從上述結果中,有1個訂單的用戶應該是2,而有3個訂單的用戶應該是4個。所以這樣做可以做到嗎?

+0

注意:在測試時(在SQL服務器中,因爲這就是我手邊的),所以你必須將你的GROUP BY改成「userid,username」才能使它工作(首先,不能在SELECT中包含用戶名列出它是否不在GROUP BY中,其次,如果你只是將GROUP BY改爲「username」,那麼你的數據的最後3行將全部組合在一起)。 – 2010-09-30 20:27:56

回答

2

用途:

SELECT COUNT(*) 
    FROM (SELECT o.username, 
       COUNT(o.userid) AS cnt 
      FROM ORDERS o 
     GROUP BY o.userid 
     HAVING cnt = ?) x 

替換「?」與您想要查看具有該計數值的用戶數量的數字。

+0

同樣的事情我得到錯誤代碼:1248每個派生表必須有它自己的別名 – 2010-09-30 20:27:48

+1

@William史密斯:修正了,忘了添加表別名(「x」)。 – 2010-09-30 20:29:53

+0

非常感謝您的幫助 – 2010-09-30 20:31:08

3

我想你可以只添加這樣的事情在你的查詢:

SELECT InnerCount, COUNT(*) 
FROM 
(
    -- your query 
    SELECT username, count(userid) AS InnerCount 
    FROM orders 
    GROUP BY userid 
) t1 
GROUP BY InnerCount 

(警告:沒有碰過的mysql年)

+0

我得到這個錯誤 錯誤代碼:1248 每個派生表都必須有它自己的別名 – 2010-09-30 20:25:36

+0

我編輯它以在它失敗後在右括號後添加「t1」別名。 – 2010-09-30 20:28:29

+0

大聲笑感謝它像一個魅力工作! – 2010-09-30 20:30:43