选择COUNT列和GROUP BY

时间:2012-09-30 14:46:17

标签: php mysql select 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可以多次挂起或已完成,但我希望我的查询返回 3 (基于上面的表示例)。

因此,如果付款状态已完成,我希望我的查询为COUNT GROUPED user_ids。

想法?

5 个答案:

答案 0 :(得分:2)

您可以使用DISTINCT关键字选择唯一的用户ID,如此

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

答案 1 :(得分:2)

听起来像是一个独特的计数是你需要的。扔掉小组,试试这个:

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

答案 2 :(得分:2)

对于3的结果,将Count(user_id)替换为Count(distinct user_id)并删除该组。

这会为您提供付款状态为已完成的唯一user_id计数。

答案 3 :(得分:1)

因为您只对user_ID的计数感兴趣,所以您不需要使用GROUP BY子句

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

当您尝试添加GROUP BY子句时。结果与您的期望大不相同。

答案 4 :(得分:1)

使用此:

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