在SQL中连续计算Null列

Isl*_*lam 24 sql

我想知道在SQL中计算行的空列的可能性,我有一个表具有可空值的表,我只想要一个返回某个行(某个客户)的空列数的int的查询.

Mic*_*ski 37

此方法为空列分配1或0,并将它们全部添加在一起.希望你没有太多可以为空的列添加到这里......

SELECT 
  ((CASE WHEN col1 IS NULL THEN 1 ELSE 0 END)
  + (CASE WHEN col2 IS NULL THEN 1 ELSE 0 END)
  + (CASE WHEN col3 IS NULL THEN 1 ELSE 0 END)
  ...
  ...
  + (CASE WHEN col10 IS NULL THEN 1 ELSE 0 END)) AS sum_of_nulls
FROM table
WHERE Customer=some_cust_id
Run Code Online (Sandbox Code Playgroud)

注意,IF()如果你的RDBMS支持它,你也可以在语法上更干净一点.

SELECT 
  (IF(col1 IS NULL, 1, 0)
  + IF(col2 IS NULL, 1, 0)
  + IF(col3 IS NULL, 1, 0)
  ...
  ...
  + IF(col10 IS NULL, 1, 0)) AS sum_of_nulls
FROM table
WHERE Customer=some_cust_id
Run Code Online (Sandbox Code Playgroud)

我在一张桌子上测试了这个模式,看起来工作正常.


Dre*_*pin 5

我的回答基于Michael Berkowski 的回答,但为了避免输入数百个列名,我所做的是:

第 1 步:获取表中所有列的列表

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'myTable';
Run Code Online (Sandbox Code Playgroud)

第 2 步:将列表粘贴到 Notepad++ 中(任何支持正则表达式替换的编辑器都可以使用)。然后使用这个替换模式

第 3 步:预先添加并将SELECT identityColumnName,最后一个更改+AS NullCount FROM myTable并可选地添加一个ORDER BY...

SELECT 
    identityColumnName, 
    (CASE WHEN column001 IS NULL THEN 1 ELSE 0 END) +
    -- ...
    (CASE WHEN column200 IS NULL THEN 1 ELSE 0 END) AS NullCount
FROM
    myTable
ORDER BY 
    NullCount DESC
Run Code Online (Sandbox Code Playgroud)