MySQL中的COUNT CASE和WHEN语句

时间:2011-02-18 18:27:51

标签: sql mysql aggregate-functions

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

2 个答案:

答案 0 :(得分:71)

使用:

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&整个表不是NULL。根据需要,您可能需要GROUP BY子句。

答案 1 :(得分:0)

您可以利用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语句的原因。