DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `distinctinstancegroup`(IN `db` VARCHAR(64) CHARSET utf8, IN `tbl` VARCHAR(64) CHARSET utf8, IN `colprobe` VARCHAR(64) CHARSET utf8, IN `colgroup` VARCHAR(64) CHARSET utf8) EXECUTE IMMEDIATE CONCAT( 'SELECT ',colgroup,' AS ',colgroup,', COUNT(DISTINCT (CAST(',colprobe,' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin)) AS Instances, ROUND((COUNT(DISTINCT (CAST(',colprobe,' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin)) * 100 / SUM(COUNT(DISTINCT (CAST(',colprobe,' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin))) OVER()),1) AS I_Percent, COUNT(*) AS Records, ROUND((COUNT(*) * 100 / SUM(COUNT(*)) OVER()),1) AS R_Percent FROM ',db,'.',tbl,' GROUP BY (CAST(',colgroup,' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin)' )$$ DELIMITER ;