0

在这里,我遇到了一个我自己无法解决的问题。

我的问题是:

我需要 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    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 可以多次处于 Pending 或 Completed 状态,但我希望我的查询返回3(基于上面的表示例)。

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

想法?

4

5 回答 5

3

您可以使用DISTINCT关键字来选择唯一的用户 ID,就像这样

"SELECT COUNT(DISTINCT user_id) AS total_donors
FROM " . DONATION_SECURITY_TABLE .
" WHERE payment_status = 'Completed' 
于 2012-09-30T14:48:48.407 回答
2

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

SELECT
  COUNT(DISTINCT user_id) AS total_donors
FROM
  mytable
WHERE
  payment_status = 'Completed'
于 2012-09-30T14:49:04.497 回答
2

对于 3 的结果,将您的替换Count(user_id)Count(distinct user_id)并删除 group by。

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

于 2012-09-30T15:07:37.367 回答
1

由于您只对 的计数感兴趣user_ID,因此您不需要使用GROUP BY子句

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

当您尝试添加GROUP BY子句时。结果与您的预期大相径庭。

于 2012-09-30T14:49:26.610 回答
1

用这个:

SELECT COUNT(DISTINCT `user_id`) as `Total` FROM `Donation_Table`
WHERE `payment_status` = 'Completed'
于 2012-09-30T14:50:00.577 回答