我遇到了一个无法解决问题的问题。
我的问题是:
我需要选择列的计数,但我还需要在同一列上使用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。
想法?
答案 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'