This can be done by building a dynamic query, for example:
SELECT id, (IF(col1 = NULL OR col1 = "", 1, 0) + IF(col2 = NULL OR col3 = "", 1, 0) + ... IF(coln = NULL OR coln = "", 1, 0) ) AS null_count FROM table_name ORDER BY null_count DESC LIMIT 1;
This can be easily done by generating a new dynamic query using INFORMATION_SCHEMA.COLUMNS , and then running dynamic sql query . You may also need to increase the maximum output length from the GROUP_CONCAT function by setting the group_concat_max_len session level variable to a higher value.
SET GLOBAL group_concat_max_len = 4294967295; SELECT @query1 := CONCAT('SELECT id, (', GROUP_CONCAT(CONCAT('IF(',COLUMN_NAME,' IS NULL OR ', COLUMN_NAME,' = "", 1, 0 ) ') SEPARATOR ' + '), ') AS null_count FROM table_name ORDER BY null_count DESC LIMIT 1') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = SCHEMA() AND TABLE_NAME = 'table_name'; PREPARE stmt FROM @query1; EXECUTE stmt; DEALLOCATE PREPARE stmt;
Omesh source share