计算表的每列中的非空值

时间:2011-08-27 22:45:21

标签: mysql data-migration counting

我正在寻找数据迁移项目中缺少的数据,这份报告对我很有帮助。

给定一个MySQL表,我想计算该表的每一行中的所有空(NULL或'')值。输出将是列名列表以及每列的空行或非空行数。我会手动将这些数据与源表进行比较 - 手动,因为我希望很少有计数匹配完全,并且源名称和导入表之间的列名完全不同。

我有大约30个表要检查,一些有100列。我可以从我的PC直接访问MySQL,但是没有权限在服务器上使用数据库运行任何脚本。

TableA的示例

Col1 Col2 Col3
'XX' NULL 'XX'
'XX' NULL ''
'XX' 'XX' 'XX'
'XX' ''   'XX'

我想要的报告是(对于非空计数,“计为空”):

Col1: 4
Col2: 1
Col3: 3

4 个答案:

答案 0 :(得分:8)

COUNT也计算空字符串,因此您的查询应如下所示:

SELECT COUNT( NULLIF( col1, '' ) ), COUNT( NULLIF( col2, '' ) ), ...

答案 1 :(得分:2)

您可以对每个表使用以下查询

SELECT COUNT(*), COUNT(col1) as col1, COUNT(col2) as col2
FROM TABLE1

要获取特定表的所有列,您应该运行查询

 select column_name from information_schema.columns where TABLE_NAME='TABLE1';

此查询的结果可用于自动生成查询,例如第一个。

答案 2 :(得分:1)

仅计算具有值的行(跳过空/空行)!!!

SELECT COUNT( NULLIF( Column_Name, '' ) ) from Table_name

答案 3 :(得分:0)

这对我有用

SELECT count( NULLIF( doctor_id, '' )) as doctor_count,count( NULLIF( chemist_id, '' )) as chemistcount from table_name WHERE employee_id="20";