【问题标题】:Count rows returned from a GROUP BY计算从 GROUP BY 返回的行数
【发布时间】:2013-07-25 17:27:14
【问题描述】:

我目前有这个问题

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

哪个(在我的例子中)返回两行这样

COUNT(*)
1
1

但计数并没有计算整个查询,一次只计算一行。我将如何获得所需的输出?

COUNT(*)
2

编辑

group by的原因是让拥有多个应用的​​用户只算1个。例如

约翰有 4 个申请 Tracy 有 1 个应用程序 Fred 有 2 个应用程序

返回的总数为 3。

【问题讨论】:

  • 那你为什么有一个GROUP BY?这说give me the count for each group。如果您只想要总数,请简化。 ORDER BY 也完全没有意义。该列甚至没有在输出中返回...
  • 因为我不想统计一个用户的多个应用程序。
  • 所以COUNT(DISTINCT user_id).
  • 是的,只是等到我可以接受下面的答案。但是感谢您的评论。

标签: mysql


【解决方案1】:

这将返回 2:

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

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

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多