В моей базе данных postgresql есть таблица людей. В этой таблице есть столбец 'sex', содержащий значения 'M' и 'F'. Я хотел бы получить процент этой таблицы, которая имеет пол «М».
Более конкретно, я хотел бы получить этот процент как часть группы по утверждению, которое группирует людей по почтовому индексу (у нас есть столбец почтового индекса) и возвращает процент мужчин каждого почтового индекса.
Этот оператор успешно выбирает количество мужчин во всей таблице.
select count(*) from contacts_6 and sex='M'
Этот оператор успешно выбирает общее количество людей в каждом почтовом индексе и группах по почтовому индексу ...
select home_zip, count(*) as total from contacts_6 where home_zip != '' group by home_zip
Этот оператор успешно извлекает фиктивный процент, рассчитанный из фиктивного значения 2,0, деленного на общее число людей в каждом почтовом индексе и групп по почтовому индексу ...
select home_zip, ROUND(2.0 / count(*), 3) as stat from contacts_6 where home_zip != '' group by home_zip
Как можно Я заменяю фиктивное значение 2.0 на фактическое число мужчин в почтовом индексе?
Я пробовал это ...
select home_zip, ROUND((select b from
(select count(*) from contacts_6 where contact_id < 10000 and sex='M') as b )
/ count(*), 3) as stat from contacts_6 where home_zip != '' group by home_zip
, которое возвращает ошибку:
ОШИБКА: оператор не существует: record / bigint LINE 9: / count (*), 3) как stat из contacts_6, где home_zip ... ^ СОВЕТ: ни один оператор не соответствует заданному имени и типу аргумента. Возможно, вам придется добавить явные приведения типов. SQL состояние: 42883 символов: 695