SQL Count空字段

Tom*_*Tom 2 sql null select

我不确定这是否可行,或者是否可行,如何做到 -

我在数据库中有以下数据 -

id     |    improve |   timeframe |  criteria |  impact
-------+------------+-------------+-----------+--------- 
1      |            |    Test     |   Test    |    Test
2      |    Test    |             |   Test    |   
3      |            |    Test     |           |    
-------+------------+-------------+-----------+--------- 
Run Code Online (Sandbox Code Playgroud)

忽略id列,如何使用SQL查询确定其余12个中非空的字段数?

我已经开始 -

SELECT improve, timeframe, impact, criteria 
FROM data 
WHERE improve IS NOT NULL 
  AND timeframe IS NOT NULL 
  AND impact IS NOT NULL 
  AND criteria IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)

这只返回行数,即.3.

有任何想法吗?

谢谢.

Cit*_*ito 6

SELECT count(improve) + count(timeframe) + count(impact) + count(criteria) FROM data 
Run Code Online (Sandbox Code Playgroud)

  • @Tom,你试过这个查询吗?此外,您需要澄清"非空"的含义.在你的问题中,你谈到了"not null",这是除了Oracle之外的大多数数据库的差异.此查询计算所有非空的字段. (2认同)
  • MySQL 区分空字符串和空值。您可能有空字符串,而不是空值。如果你不想计算这些,你可以使用这个查询`SELECT count(nullif(improve,'')) + count(nullif(timeframe,'')) + count(nullif(impact,'')) + count(nullif(criteria,'')) FROM data` (2认同)

bri*_*ley 6

像这样的事情可能会让你朝着正确的方向前进

SELECT 
SUM(CASE WHEN improve IS NULL THEN 0 ELSE 1 END +
CASE WHEN timeframe IS NULL THEN  0 ELSE 1 END +
CASE WHEN criteria IS NULL THEN  0 ELSE 1 END +
CASE WHEN impact IS NULL THEN  0 ELSE 1 END)
from
data 
Run Code Online (Sandbox Code Playgroud)