Try
SELECT string, CASE WHEN COUNT(*) = 0 THEN 0 -- Handle division by zero ELSE (SUM(CASE WHEN adm = 2 THEN 1 ELSE 0 END)::decimal / COUNT(*)) * 100 END AS perc_adm FROM your_table GROUP BY string;