代码之家  ›  专栏  ›  技术社区  ›  Brett

在一个查询中执行多个MySQL计数?

  •  3
  • Brett  · 技术社区  · 14 年前

    我知道下面的查询是无效的,但我只是将它作为一个例子,作为我正在努力实现的目标。

    基本上我想做的就是数数( )在所有行中,还将获得一个计数( )一个查询中包含条件子句的行。

    比如…

    SELECT 
        COUNT(*) AS full_amount,
        COUNT(address IF NOT NULL),
        COUNT(name IF NOT NULL)
    FROM
       table;
    

    现在,我试图在上面找到表的完整计数,&我还试图找到表中“地址”和“名称”字段不为空的行的计数。不是它们都不是空的,而是单独的。

    为了进一步解释,这是如何处理多个查询的方法,我试图避免这种情况。

    SELECT COUNT(*) FROM table AS amount;
    
    SELECT COUNT(*) FROM table AS amount WHERE address IS NOT NULL;
    
    SELECT COUNT(*) FROM table AS amount WHERE name IS NOT NULL;
    

    有没有比运行多个查询更好的方法?

    2 回复  |  直到 12 年前
        1
  •  4
  •   SimonJ    14 年前

    你就快到了- COUNT 统计其参数非空的行数:

    SELECT COUNT(*) AS full_amount,
        COUNT(address) AS has_address,
        COUNT(name) AS has_name
    FROM table;
    

    也看到 COUNT(DISTINCT ...) 计算 不同的 非空值。

        2
  •  0
  •   Larry Lustig    14 年前

    你可以使用这个技巧:

     SELECT COUNT(*), 
        SUM(IFNULL(address, 0, 1)) AS address_count, 
        SUM(IFNULL(name, 0, 1)) as name_count
     FROM Table;