在表格的每一列中计算非空值

问题描述:

我正在寻找数据迁移项目中缺失的数据,这份报告将对我有很大的帮助。在表格的每一列中计算非空值

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

我有大约30张桌子要检查,有几百列。我可以从我的PC直接访问MySQL,但无法访问数据库服务器上的任何脚本。

示例表A

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

我希望这份报告是(对于非空计数与“”算为空):

Col1: 4 
Col2: 1 
Col3: 3 
+0

我在PHP脚本结束时解决它。我为每个表循环,然后为表中的每一列循环,然后为列不为空的表和一个非空字符串或数字执行COUNT(*)。结果放入HTML表格中,该表格可以很好地复制到电子表格中。它涉及很多查询,但工作。 – Jason

+0

为防万一这个解决方案对任何人都有用,我已经在这里发布了它:http://academe.co.uk/2011/08/mysql-finding-counts-of-data-by-columns/ (我会尽快上传原始文件并修复语法突出显示)。 – Jason

您可以使用下面的查询为每个表

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

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

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

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

+0

可能会写很多100列和更多的表格。 ;)@Jason:但如果您熟悉脚本语言,您可以使用[Heidi SQL](http://www.heidisql.com/)等工具生成并提交它... –

+0

这给了我非 - 空数,这是一个好的开始。 MySQL将空字符串视为NOT NULL(不同于Oracle)。目的地系统似乎在任何地方都可以自由使用NULL和''来表示“没有数据”,所以我不能依靠寻找非空来查找迁移的数据。不过这是一个好的开始,我可以通过一些搜索将它们拼凑在一起,并在文本编辑器中进行替换。 – Jason

+1

我只是可能在数据库服务器的防火墙上打出一个漏洞,所以我可以在我的Web服务器上编写一些PHP5脚本。看来我无法避免为此编写脚本。 – Jason

COUNT计数空字符串,这样你的查询应该是这样的:

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

谢谢。我最后将计数分成一系列查询,以使其更易于自动化(每一行都是可以在表格单元格中显示的列计数)。 – Jason

计数行只具有值(跳过空/空行)!

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

这个工作对我来说

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