Sql 具有指定空列数的行数

Sql 具有指定空列数的行数,sql,null,Sql,Null,如何获取表中有多少行具有特定数量的空值的信息? 我想得到这样的东西: Number of nulls | Number of rows 0 | 10 1 | 4 2 | 11 动机: 我需要这个数据挖掘的目的。例如,如果我有一个几乎所有列中都有空值的观测值,那么我需要去掉这个观测值,但也可能有一种情况,即许多观测值的空值很小,这是可以接受的。仅使用SQL,您将不得不求助于令人不快

如何获取表中有多少行具有特定数量的空值的信息?
我想得到这样的东西:

Number of nulls | Number of rows
        0       |      10
        1       |       4
        2       |      11
动机

我需要这个数据挖掘的目的。例如,如果我有一个几乎所有列中都有空值的观测值,那么我需要去掉这个观测值,但也可能有一种情况,即许多观测值的空值很小,这是可以接受的。

仅使用SQL,您将不得不求助于令人不快的代码,例如:

SELECT CASE WHEN column1 IS NULL THEN 1 ELSE 0 END
       + CASE WHEN column2 IS NULL THEN 1 ELSE 0 END
       + ... AS num_nulls,
       COUNT(*) as num_rows
FROM table 
GROUP BY num_nulls;
select MyCol, Count(MyCountCol) from 
(select 0 + 
      case  when Col1 is null then 1 else 0 end 
      + case  when Col2 is null then 1 else 0 end 
      -- + whatever other col names are in your table  
      as MyCountCol

from MyTable)
group by MyCol

还请注意,并非所有SQL方言都支持在
GROUP by
子句中引用ALA计算的列,因此您可能会得到一个更加丑陋的查询。不用说,您还必须对每个表进行不同的查询。当然,您可以使用一些
信息\u模式生成查询。
巫毒…

仅使用SQL,您将不得不使用令人不快的代码,例如:

SELECT CASE WHEN column1 IS NULL THEN 1 ELSE 0 END
       + CASE WHEN column2 IS NULL THEN 1 ELSE 0 END
       + ... AS num_nulls,
       COUNT(*) as num_rows
FROM table 
GROUP BY num_nulls;
select MyCol, Count(MyCountCol) from 
(select 0 + 
      case  when Col1 is null then 1 else 0 end 
      + case  when Col2 is null then 1 else 0 end 
      -- + whatever other col names are in your table  
      as MyCountCol

from MyTable)
group by MyCol
还请注意,并非所有SQL方言都支持在
GROUP by
子句中引用ALA计算的列,因此您可能会得到一个更加丑陋的查询。不用说,您还必须对每个表进行不同的查询。当然,您可以使用一些
信息\u模式生成查询。
巫毒…

类似于:

SELECT CASE WHEN column1 IS NULL THEN 1 ELSE 0 END
       + CASE WHEN column2 IS NULL THEN 1 ELSE 0 END
       + ... AS num_nulls,
       COUNT(*) as num_rows
FROM table 
GROUP BY num_nulls;
select MyCol, Count(MyCountCol) from 
(select 0 + 
      case  when Col1 is null then 1 else 0 end 
      + case  when Col2 is null then 1 else 0 end 
      -- + whatever other col names are in your table  
      as MyCountCol

from MyTable)
group by MyCol
比如:

SELECT CASE WHEN column1 IS NULL THEN 1 ELSE 0 END
       + CASE WHEN column2 IS NULL THEN 1 ELSE 0 END
       + ... AS num_nulls,
       COUNT(*) as num_rows
FROM table 
GROUP BY num_nulls;
select MyCol, Count(MyCountCol) from 
(select 0 + 
      case  when Col1 is null then 1 else 0 end 
      + case  when Col2 is null then 1 else 0 end 
      -- + whatever other col names are in your table  
      as MyCountCol

from MyTable)
group by MyCol

对于SQL Server 2008,您可以

DECLARE @T TABLE
(
pk INT PRIMARY KEY, 
c1 INT,
c2 INT,
c3 VARCHAR(10)
)

INSERT INTO @T
SELECT 1,1,1,'foo'
UNION ALL
SELECT 2,1,NULL,'bar'
UNION ALL
SELECT 3,NULL,NULL,NULL
UNION ALL
SELECT 4,NULL,NULL,NULL


SELECT Num AS [Number of Nulls],
       COUNT(*) AS [Number of rows]
FROM @T
CROSS APPLY (SELECT COUNT(*) - COUNT(c) FROM (VALUES(cast(c1 as SQL_VARIANT)),
                                                    (c2),
                                                    (c3)) T (c)) CA(Num)
GROUP BY Num

对于SQL Server 2008,您可以

DECLARE @T TABLE
(
pk INT PRIMARY KEY, 
c1 INT,
c2 INT,
c3 VARCHAR(10)
)

INSERT INTO @T
SELECT 1,1,1,'foo'
UNION ALL
SELECT 2,1,NULL,'bar'
UNION ALL
SELECT 3,NULL,NULL,NULL
UNION ALL
SELECT 4,NULL,NULL,NULL


SELECT Num AS [Number of Nulls],
       COUNT(*) AS [Number of rows]
FROM @T
CROSS APPLY (SELECT COUNT(*) - COUNT(c) FROM (VALUES(cast(c1 as SQL_VARIANT)),
                                                    (c2),
                                                    (c3)) T (c)) CA(Num)
GROUP BY Num

空值的数量是指具有空值的列的数量吗?是的,我指具有空值的列的数量。什么RDBMS?什么表结构?在结果中不需要表名吗?在表的所有字段中创建null的聚合值似乎是一个毫无意义的查询。你到底想知道什么?我在SQL Server工作,我想知道一些特定表格的信息,比如“员工”。独立地获取每个列的空值信息很容易,但它没有说明这些空值是否分组(分组是指某些观测值在所有列中都为空)。空值的数量是指具有空值的列的数量吗?是的,我是指具有空值的列的数量。什么RDBMS?什么表结构?在结果中不需要表名吗?在表的所有字段中创建null的聚合值似乎是一个毫无意义的查询。你到底想知道什么?我在SQL Server工作,我想知道一些特定表格的信息,比如“员工”。独立地获取每个列的空值信息是很容易的,但它并没有说这些空值是否分组(分组是指某些观察值在所有列中都为空)。太好了!这看起来正是我想要的,尽管很遗憾每个表需要编写不同的查询。太好了!这看起来正是我想要的,尽管遗憾的是需要为每个表编写不同的查询。