WITH SCANNERS AS ( SELECT DATE_FORMAT(MIN(s04_timestamp), "%Y-%m-%d %H:%i:00") AS time, COUNT(*) AS total, SUM(scanner_status NOT IN ("No Read", "No Code", "Multi Label")) AS good_read, SUM(scanner_status = "No Read") AS no_read, SUM(scanner_status = "No Code") AS no_code, SUM(scanner_status = "Multi Label") AS multi_label FROM package_history WHERE s04_timestamp BETWEEN :startDate AND :endDate AND scanner = :scanner GROUP BY DATE_FORMAT(s04_timestamp, "%Y-%m-%d %H:%i:00") ORDER BY DATE_FORMAT(s04_timestamp, "%Y-%m-%d %H:%i:00") ) SELECT time, /* Counts: */ total AS total_count, good_read AS good_read_count, no_read AS no_read_count, no_code AS no_code_count, multi_label AS multi_label_count, /* PPH: */ ROUND(total*60) AS total_pph, ROUND(good_read*60) AS good_read_pph, ROUND(no_read*60) AS no_read_pph, ROUND(no_code*60) AS no_code_pph, ROUND(multi_label*60) AS multi_label_pph, /* Percents: */ ROUND(good_read/total, 4) AS good_read_percent, ROUND(no_read/total, 4) AS no_read_percent, ROUND(no_code/total, 4) AS no_code_percent, ROUND(multi_label/total, 4) AS multi_label_percent FROM SCANNERS;