在表格的每一列中计算非空值
我正在寻找数据迁移项目中缺失的数据,这份报告将对我有很大的帮助。在表格的每一列中计算非空值
给定一个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
您可以使用下面的查询为每个表
SELECT COUNT(*), COUNT(col1) as col1, COUNT(col2) as col2
FROM TABLE1
要获取特定表的所有列,您应该运行查询
select column_name from information_schema.columns where TABLE_NAME='TABLE1';
此查询的结果可用于自动生成查询,如第一个查询。
可能会写很多100列和更多的表格。 ;)@Jason:但如果您熟悉脚本语言,您可以使用[Heidi SQL](http://www.heidisql.com/)等工具生成并提交它... –
这给了我非 - 空数,这是一个好的开始。 MySQL将空字符串视为NOT NULL(不同于Oracle)。目的地系统似乎在任何地方都可以自由使用NULL和''来表示“没有数据”,所以我不能依靠寻找非空来查找迁移的数据。不过这是一个好的开始,我可以通过一些搜索将它们拼凑在一起,并在文本编辑器中进行替换。 – Jason
我只是可能在数据库服务器的防火墙上打出一个漏洞,所以我可以在我的Web服务器上编写一些PHP5脚本。看来我无法避免为此编写脚本。 – Jason
COUNT
计数空字符串,这样你的查询应该是这样的:
SELECT COUNT(NULLIF(col1, '')), COUNT(NULLIF(col2, '')), ...
谢谢。我最后将计数分成一系列查询,以使其更易于自动化(每一行都是可以在表格单元格中显示的列计数)。 – 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";
我在PHP脚本结束时解决它。我为每个表循环,然后为表中的每一列循环,然后为列不为空的表和一个非空字符串或数字执行COUNT(*)。结果放入HTML表格中,该表格可以很好地复制到电子表格中。它涉及很多查询,但工作。 – Jason
为防万一这个解决方案对任何人都有用,我已经在这里发布了它:http://academe.co.uk/2011/08/mysql-finding-counts-of-data-by-columns/ (我会尽快上传原始文件并修复语法突出显示)。 – Jason