Для решения данной задачи необходимо выполнить следующие шаги⁚
1. Найти общее количество мужчин в каждом городе, ограничиваясь клиентами в возрасте от 20 до 40 лет.
Для этого можно воспользоваться следующим запросом⁚
sql
SELECT city_info.name_city, COUNT(client_info.id_client) as total_males
FROM client_info
INNER JOIN city_info ON client_info.id_city city_info.id_city
WHERE client_info.gender ‘M’ AND client_info.age > 20 AND client_info.age < 40
GROUP BY city_info.name_city
В данном запросе мы выбираем название города из таблицы city_info и считаем количество клиентов (мужчин) из таблицы client_info, удовлетворяющих заданным условиям (мужской пол и возраст от 20 до 40 лет). Затем используем оператор GROUP BY для группировки результатов по названию города.
2. Найти общее количество клиентов в каждом городе, ограничиваясь клиентами в возрасте от 20 до 40 лет.
Для этого можно воспользоваться следующим запросом⁚
sql
SELECT city_info.name_city, COUNT(client_info.id_client) as total_clients
FROM client_info
INNER JOIN city_info ON client_info.id_city city_info.id_city
WHERE client_info.age > 20 AND client_info.age < 40
GROUP BY city_info.name_city
В этом запросе мы выбираем название города из таблицы city_info и считаем общее количество клиентов из таблицы client_info, удовлетворяющих условию о возрасте от 20 до 40 лет. Также используем оператор GROUP BY для группировки результатов по названию города.
3. Соединить результаты первых двух запросов, чтобы вычислить долю мужчин (% мужчин среди всех клиентов в данном городе).
Для этого можно воспользоваться следующим запросом⁚
sql
SELECT a.name_city, (a.total_males * 100.0 / b.total_clients) as male_percentage
FROM (
SELECT city_info.name_city, COUNT(client_info.id_client) as total_males
FROM client_info
INNER JOIN city_info ON client_info.id_city city_info.id_city
WHERE client_info;gender ‘M’ AND client_info.age > 20 AND client_info.age < 40
GROUP BY city_info.name_city
) a
INNER JOIN (
SELECT city_info.name_city, COUNT(client_info.id_client) as total_clients
FROM client_info
INNER JOIN city_info ON client_info.id_city city_info.id_city
WHERE client_info.age > 20 AND client_info.age < 40
GROUP BY city_info.name_city
) b ON a.name_city b.name_city