Помогите решить задачку по sql
В реляционной базе данных существуют таблицы:
Cities - список городов
id - первичный ключ name - название population - численность населения founded - год основания country_id - id страны
Countries - список стран
id - первичный ключ name - название population - численность населения gdp - валовый продукт в долларах
Companies - компании
id - первичный ключ name - название city_id - город в котором находится штаб-квартира revenue - годовая выручка в долларах labors - численность сотрудников
Составьте запрос, который:
Для всех стран в базе данных посчитать количество компаний со штаб квартирами в этой стране численность сотрудников в которых больше 1000 человек В результате должны быть только количество компаний и названия стран с населением более 1 миллиона человек и валовым продуктом более 10 миллиардов долларов, у которых суммарная выручка выбранных компаний составляет более 1 миллиарда долларов
Мой вариант:
select *, count(labors),count(revenue),FROM Companies
group by name
HAVING count(labors) >=1000 AND count(revenue) >= 1000000000
( это я пытался выстроить компании с численность сотрудников > 1000 и доходом более 1ккк) Далее я так полагаю нужно получившийся список сравнить со списком (Countries ) и составить новый список и новый список сравнить со с писком (Cities ) и этот список будет ответом.
П.С. Хотелось бы получить не просто ответ но и логику выполнения такого задания.
Ответы (2 шт):
Это учебное задание и вы должны решить его сами. Но вы даже не попытались.
Вот прямо сходу:
select *- вам указан конкретный список полей для вывода, никаких звёздочек, конкретные поля в конкретном порядкеДля всех стран- а у вас таблица со странами даже не участвует в запросе, хотя по формулировке очевидно, что всё будет завязано на список стран,FROM- это что? Этот запрос даже не скомпилируется
Вам нужно более тщательно прочитать задание и попытаться хотя бы в первом приближении без изысков написать запрос "в лоб". А дальше уже разбираться - что вы не знаете как сделать, пробовать разные варианты, и если не получится что-то - задавать более конкретный вопрос.
То есть нужно написать SELECT конкретных полей (и аггрегаций) из конкретного перечня таблиц, связать их как-то через условия, эти таблицы, ну и дальше над этим всем работать.
Один из вариантов реализации:
SELECT cou.name AS `Country`, COUNT(com.id)
FROM Companies com
LEFT JOIN Cities cit
ON cit.id = com.city_id
LEFT JOIN Countries cou
ON cit.country_id = cou.id
WHERE com.labors > 1000
AND city_id IN (SELECT cit2.id
FROM Cities cit2
LEFT JOIN Countries cou2
ON cit2.country_id = cou2.id
WHERE cou2.population > 1000000 AND cou2.gdp > 10000000000)
GROUP BY cou.id
HAVING SUM(com.revenue) > 1000000000