Ошибка, которую вы получаете, происходит из-за того, что вы пытаетесь использовать производное значение в том же предложении select, в котором вы его создаете. Возможно, вам нужно будет сделать что-то вроде этого:
SELECT count(*) as TotalStates,
(SELECT count(*) from states) as NumberStates,
(count(*)/(SELECT count(*) from states)) as percentage
FROM states
WHERE criteria = x
Однако, это не очень эффективно или желательно для удобочитаемости или ремонтопригодности.Существует ли причина, по которой вы не можете выполнить это в двух запросах или, что еще лучше, получить два элемента данных в отдельных запросах и рассчитать процент в коде потребления?