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)
我在一张桌子上测试了这个模式,看起来工作正常.
我的回答基于Michael Berkowski 的回答,但为了避免输入数百个列名,我所做的是:
第 1 步:获取表中所有列的列表
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'myTable';
Run Code Online (Sandbox Code Playgroud)
第 2 步:将列表粘贴到 Notepad++ 中(任何支持正则表达式替换的编辑器都可以使用)。然后使用这个替换模式
搜索:
^(.*)$
Run Code Online (Sandbox Code Playgroud)代替:
\(CASE WHEN \1 IS NULL THEN 1 ELSE 0 END\) +
Run Code Online (Sandbox Code Playgroud)第 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)