php
  • mysql
  • select
  • group-by
  • 2012-09-30 195 views 0 likes 
    0

    在這裏,我遇到了一個問題,我無法解決自己。選擇COUNT列和GROUP BY

    我的問題是:

    我需要選擇一列的數量,但我還需要GROUP BY對同一列。我迄今爲止所嘗試的並不像我預期的那樣迴歸。

    這裏是我的嘗試:

    'SELECT COUNT(user_id) AS total_donors 
        FROM ' . DONATION_SECURITY_TABLE . 
        " WHERE payment_status = 'Completed' 
        GROUP BY user_id" 
    

    這是我的表看起來像:

    id user_id payment_status 
    1  20   Completed 
    2  33   Completed 
    3  44   Completed 
    4  20   Pending 
    5  33   Pending 
    6  44   Completed 
    7  20   Completed 
    

    正如你看到的,單一的user_id可未完成或者完成一次以上,但我希望我的查詢返回(基於上面的表格示例)。

    因此,如果付款狀態完成,我希望查詢COUNT GROUPED user_ids。

    想法?

    +0

    您可以對行進行計數,而不是對列進行計數。列的數量是已知的。 –

    +0

    您可以粘貼您正在尋找的預期輸出嗎? – balanv

    +1

    @ WebnetMobile.com:當'COUNT'的參數是一列時,我認爲說你是「計算列」是非常合理的,這意味着你正在計算該列非空的行。 (OP沒有寫「**列**的數量」,他寫了「**列**的數量」。) – ruakh

    回答

    2

    可以使用DISTINCT關鍵字來選擇,像這樣

    "SELECT COUNT(DISTINCT user_id) AS total_donors 
    FROM " . DONATION_SECURITY_TABLE . 
    " WHERE payment_status = 'Completed' 
    
    2

    聽起來像重複計數的唯一用戶ID的是你所需要的。通過扔掉組,試試這個:

    SELECT 
        COUNT(DISTINCT user_id) AS total_donors 
    FROM 
        mytable 
    WHERE 
        payment_status = 'Completed' 
    
    1

    因爲你只是對user_ID計數興趣,你不需要使用GROUP BY條款

    SELECT COUNT(DISTINCT user_ID) 
    FROM tableName 
    WHERE payment_status = 'completed' 
    

    當您嘗試添加GROUP BY條款。結果與你所期待的有很大不同。

    1

    使用此:

    SELECT COUNT(DISTINCT `user_id`) as `Total` FROM `Donation_Table` 
    WHERE `payment_status` = 'Completed' 
    
    2

    對於3的結果,替換你Count(user_id)Count(distinct user_id)並刪除該組。

    這給你一個支付狀態爲完成的唯一user_id的計數。

    相關問題