具有 COUNT(var) 的 SQL 子查询将 0 变为 NULL



我用一个子查询编写了一个SQL查询来包含计数。当计数为 0 时,我尝试过滤掉 0,它将 0 变为 NULL 并保留行,反之亦然。结果是我无法过滤掉 0,这是包含计数的目的。

 SELECT  distinct      
         a
        ,b
        ,
     (SELECT  
        count(id)
        FROM seq_stud
        WHERE scs.SequenceID = seq_stud.SequenceID
       and seq_stud.EndDate is null 
      HAVING count(id) <> 0 
      ) As t1   
    FROM sp 
    INNER JOIN p on sp.ProgramID = p.ProgramID  
    ...etc.

有谁知道为什么会发生这种情况以及如何过滤掉 0 计数?

您不会在 SELECT 子句中进行筛选。 如果您不希望seq_stud 中没有匹配的行,请使用 WHERE

WHERE EXISTS (SELECT 1 
              FROM seq_stud ss
              WHERE scs.SequenceID = ss.SequenceID and ss.EndDate is null 
             )

我会完全删除 HAVING 语句。 您需要将其放在 WHERE 子句中。 否则,它将返回 null,如您所发现的。

SELECT  distinct a, b, 
   (SELECT count(id)
    FROM seq_stud
    WHERE scs.SequenceID = seq_stud.SequenceID
       and seq_stud.EndDate is null 
   ) As t1   
FROM sp 
INNER JOIN p on sp.ProgramID = p.ProgramID  
WHERE t1 > 0

我刚刚想通了。Select 子查询应作为 WHERE 语句包含在内

在存在子句中使用 count((

相关内容

  • 没有找到相关文章

最新更新