2011-08-27 57 views
0

我正在尋找數據遷移項目中缺失的數據,這份報告將對我有很大的幫助。在表格的每一列中計算非空值

給定一個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

回答

2

您可以使用下面的查詢爲每個表

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

7

COUNT計數空字符串,這樣你的查詢應該是這樣的:

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

謝謝。我最後將計數分成一系列查詢,以使其更易於自動化(每一行都是可以在表格單元格中顯示的列計數)。 – Jason

1

計數行只具有值(跳過空/空行)!

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

這個工作對我來說

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