计算某列不为空或空的每一行

时间:2015-12-14 15:14:35

标签: mysql sql

我想获得一个COUNT,其中某列应该至少有一个值。如果此列包含EMPTYNULL值,则不应包含在COUNT中。问题是,我尝试了很多不同的SQL函数(例如:IS NOT NULL<>LTRIMRTRIM等等...但是行和#39; t值仍包含在计数中。

例如;在数据库中,我有一个名为MYDESCRIPTION的列。表中有四条记录。其中两个在MYDESCRIPTION列中有一个值,其中两个没有。当我为那些有价值的人寻找计数时,其他两个没有价值的人仍然包含在结果中。所以它仍然显示四个。

以下是特定日期内的一些示例查询:

SELECT COUNT(*)
FROM TABLE
WHERE DATE (CREATIONDATE) >= '2014-12-01' AND
DATE (CREATIONDATE) <= '2014-12-01' AND
MYDESCRIPTION <> ''

SELECT COUNT(*)
FROM TABLE
WHERE DATE (CREATIONDATE) >= '2014-12-01' AND
      DATE (CREATIONDATE) <= '2014-12-01' AND 
      MYDESCRIPTION IS NOT NULL

这两个简单的查询只是我尝试过的一些。我想这个查询仍在计算没有值的列,因为它似乎有一个值。

5 个答案:

答案 0 :(得分:1)

您的WHERE子句应该看起来很像:

WHERE DATE (CREATIONDATE) = '2014-12-01'  
  AND MYDESCRIPTION IS NOT NULL
  AND MYDESCRIPTION <> ''

答案 1 :(得分:1)

SELECT COUNT(*) FROM TABLE  
WHERE DATE (CREATIONDATE) >= '2014-12-01' 
AND  DATE (CREATIONDATE) <= '2014-12-01' 
AND (MYDESCRIPTION IS NOT NULL and MYDESCRIPTION <> '')

答案 2 :(得分:0)

您可以在这种情况下使用SUM(CASE ...)。根据DBMS的需要调整语法。

SELECT 
      SUM(CASE WHEN LENGTH(MYDESCRIPTION) = 0 THEN 0 ELSE 1) END) AS "Non-Nulls"
FROM TABLE
WHERE DATE (CREATIONDATE) >= '2014-12-01' AND
      DATE (CREATIONDATE) <= '2014-12-01' AND 
      MYDESCRIPTION IS NOT NULL

答案 3 :(得分:0)

试试这个:

SELECT COUNT (*)
FROM
(SELECT * FROM TABLE
WHERE 1=1
AND (CAST (CREATIONDATE AS DATE) BETWEEN CAST('2014-12-01' AS DATE) AND CAST('2014-12-01' AS DATE) )
AND (MYDESCRIPTION IS NOT NULL AND LENGTH(TRIM(MYDESCRIPTION)) > 0 )
)

答案 4 :(得分:0)

SELECT COUNT(*) FROM TABLE
WHERE DATE (CREATIONDATE) >= '2014-12-01'
AND DATE (CREATIONDATE) <= '2014-12-01'
AND (MYDESCRIPTION IS NOT NULL and RTRIM(MYDESCRIPTION) <> '')

IS NOT NULL<> ''的条件不同。

IS NOT NULL表示该值未知。

<> ''表示该值不等于ZLS或零长度字符串。

在添加RTRIM时,我正在消除CHARNCHAR字段等于一堆空格的可能性,这可能是也可能不是这个OP& #39;的问题。