【问题标题】:COUNT CASE and WHEN statement in MySQLMySQL 中的 COUNT CASE 和 WHEN 语句
【发布时间】:2011-06-30 00:42:20
【问题描述】:

如何在 MySQL 查询中使用 COUNT CASE 和 WHEN 语句来统计一个 MySQL 查询中数据何时为 NULL 和何时不为 NULL?

【问题讨论】:

  • COUNT(col) = NOT NULL 的数量。 COUNT(*) - COUNT(col) = NULL 的数量为什么需要CASE
  • 我可以在 COUNT 函数中使用 case..吗?

标签: sql mysql aggregate-functions


【解决方案1】:

用途:

SELECT SUM(CASE 
             WHEN t.your_column IS NULL THEN 1
             ELSE 0
           END) AS numNull,
       SUM(CASE 
             WHEN t.your_column IS NOT NULL THEN 1
             ELSE 0
           END) AS numNotNull
  FROM YOUR_TABLE t

这将总结整个表的 NULL & not NULL 列。根据需要,您可能需要一个 GROUP BY 子句。

【讨论】:

  • 现在如何回显这个值,多少是NULL,多少不是NULL。
  • @Ivan Tanasijevic:mysql_query documentation中有例子
  • 如果您想使用COUNT 实现这一目标,您可以使用 null(未计算在内)和另一个任意值(已计算在内)。
  • 请注意,如果没有选择任何行(即表为空或 where 条件排除所有行),SUM 将返回 NULL。您仍然可以通过以这种方式对选择进行编码来获得“0”:IFNULL(SUM(...), 0)
【解决方案2】:

您可以利用 COUNT 仅计算非空值的事实:

SELECT COUNT(IFNULL(t.your_column, 1)) AS numNull,
       COUNT(t.your_column) AS numNotNull
  FROM YOUR_TABLE t

另一种方法是利用逻辑条件被评估为数字 0 和 1 的事实,因此这也可以:

SELECT IFNULL(SUM(t.your_column IS NULL), 0) AS numNull,
       IFNULL(SUM(t.your_column IS NOT NULL), 0) AS numNotNull
  FROM YOUR_TABLE t

请注意,如果没有选择行(即表为空或 where 条件排除所有行),SUM 将返回 NULL,这就是 IFNULL 语句的原因。

【讨论】:

    猜你喜欢
    • 2012-01-18
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多