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'