计算GROUP BY返回的行数

时间:2013-07-25 17:27:15

标签: mysql

我目前有这个查询

SELECT COUNT(*) 
    FROM  `applications` 
    WHERE approved =0
    GROUP BY user_id
    ORDER BY  `applications`.`user_id` ASC 

其中(在我的情况下)返回两行,如下所示

COUNT(*)
1
1

但是计数并没有计算整个查询,一次只计算一行。我如何得到这个理想的输出?

COUNT(*)
2

修改

分组的原因是,具有多个应用程序的用户仅计为1.例如

约翰有4个申请 Tracy有1个申请 弗雷德有2个申请

返回的总数为3。

2 个答案:

答案 0 :(得分:1)

如果你想要总行数,请删除“分组依据”和“顺序”(第一个是问题,第二个是不必要的,因为没有排序单行)。

SELECT COUNT(*) 
FROM  `applications` 
WHERE approved =0

如果您想要user_ids的总数,请将“count(*)”切换为“count(distinct user_id)”


现在获得2行的原因是因为GROUP BY子句打印每组计数。您可以看到,如果您将“user_id”添加到您的选择:

SELECT COUNT(*) , user_id
    FROM  `applications` 
    WHERE approved =0
    GROUP BY user_id
    ORDER BY  `applications`.`user_id` ASC 

将返回两行,如下所示

COUNT(*) , user_id
1        , user1
1        , user2

答案 1 :(得分:1)

这将返回2:

SELECT COUNT(DISTINCT user_id)
FROM applications
WHERE approved = 0

很难说这是你想要的还是DVK的答案是正确的,因为当每个用户有一个匹配的行时,它们都返回相同的答案。