Php 选择列计数和分组依据

Php 选择列计数和分组依据,php,mysql,select,group-by,Php,Mysql,Select,Group By,我遇到了一个我自己解决不了的问题 我的问题是: 我需要选择一列的计数,但我还需要在同一列上按分组。到目前为止,我所尝试的并没有像我预期的那样恢复 以下是我尝试过的: 'SELECT COUNT(user_id) AS total_donors FROM ' . DONATION_SECURITY_TABLE . " WHERE payment_status = 'Completed' GROUP BY user_id" 我的桌子是这样的: id user_id

我遇到了一个我自己解决不了的问题

我的问题是:

我需要选择一列的计数,但我还需要在同一列上按分组。到目前为止,我所尝试的并没有像我预期的那样恢复

以下是我尝试过的:

'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
如您所见,单个用户id可以挂起或完成多次,但我希望根据上面的表示例,我的查询返回3

因此,如果付款状态已完成,我希望我的查询对分组的用户ID进行计数

想法?

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

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

听起来你需要的是一个不同的计数。通过丢弃该组,然后尝试以下操作:

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

因为您只对用户ID的计数感兴趣,所以不需要使用GROUPBY子句

当您尝试添加GROUPBY子句时。结果与您预期的大不相同

使用以下命令:

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

如果结果为3,请将Countuser_id替换为Countdistinct user_id,然后按删除组


这将为您提供付款状态为“已完成”的唯一用户ID的计数。

您计算的是行,而不是列。列的计数是已知的。您能粘贴您正在寻找的预期输出吗?@WebnetMobile.com:当Count的参数是一列时,我认为可以合理地说您正在计算列,这意味着您正在计算该列不为空的行。OP没有写列数,她写了一列数。@ruakh:没有,您正在计算符合WHERE条件的行数。列不包含任何数据。Rows do.@WebnetMobile.com:您正在计算1与WHERE子句匹配,2具有非空值的行,该值用于指定要计算的参数。在say COUNTcolumn_name的情况下,可以合理地说您正在计算column_name。这就是英语的工作原理。如果你不喜欢它,你可以去学罗布班。
SELECT COUNT(DISTINCT `user_id`) as `Total` FROM `Donation_Table`
WHERE `payment_status` = 'Completed'