Ниже представлены наши варианты решения заданий из онлайн тренажера на сайте SQL ACADEMY (sql-academy.org). Ответы на 66 заданий представленные в онлайн тренажере разбиты на 3 части. Здесь, в первой части, представлены ответы на первые 22 задания.
Ответы на задания 23-44 (часть 2) здесь.
Ответы на задания 45-66 (часть 3) будут тут.
Ответы на задания 67-76 (часть 4) тут.
Задание 1. Вывести имена всех когда-либо обслуживаемых пассажиров авиакомпаний.
SELECT name FROM Passenger;
Задание 2. Вывести названия всеx авиакомпаний.
SELECT name FROM Company;
Задание 3. Вывести все рейсы, совершенные из Москвы
SELECT *
FROM Trip
WHERE town_from = 'Moscow';
Задание 4. Вывести имена людей, которые заканчиваются на “man”
SELECT name
FROM Passenger
WHERE name LIKE '%man';
Задание 5. Вывести количество рейсов, совершенных на TU-134
SELECT COUNT(*) AS count
FROM Trip
WHERE plane = 'TU-134';
Задание 6. Какие компании совершали перелеты на Boeing
SELECT DISTINCT name
FROM Company
JOIN Trip
ON Company.id=Trip.company
WHERE plane = 'Boeing';
Задание 7. Вывести все названия самолётов, на которых можно улететь в Москву (Moscow)
SELECT DISTINCT plane
FROM Trip
WHERE town_to = 'Moscow';
Задание 8. В какие города можно улететь из Парижа (Paris) и сколько времени это займёт?
SELECT town_to, TIMEDIFF(time_in, time_out) AS flight_time
FROM Trip
WHERE town_from = 'Paris';
Задание 9. Какие компании организуют перелеты с Владивостока (Vladivostok)?
SELECT DISTINCT name
FROM Company
JOIN Trip
ON Company.id=Trip.company
WHERE town_from = 'Vladivostok';
Задание 10. Вывести вылеты, совершенные с 10 ч. по 14 ч. 1 января 1900 г.
SELECT * FROM Trip
WHERE time_out
BETWEEN
'1900-01-01 10:00:00'
AND
'1900-01-01 14:00:00';
Задание 11. Вывести пассажиров с самым длинным именем
SELECT name
FROM Passenger
WHERE LENGTH(name) = (SELECT MAX(LENGTH(name)) FROM Passenger);
Задание 12. Вывести id и количество пассажиров для всех прошедших полётов
SELECT trip, COUNT(passenger) as count
FROM Pass_in_trip
GROUP BY trip;
Задание 13. Вывести имена людей, у которых есть полный тёзка среди пассажиров
SELECT name
FROM Passenger
GROUP BY name
HAVING COUNT(name) > 1;
Задание 14. В какие города летал Bruce Willis?
SELECT DISTINCT town_to
FROM Trip
JOIN Pass_in_trip
ON Trip.id=Pass_in_trip.trip
JOIN Passenger
ON Pass_in_trip.passenger=Passenger.id
WHERE name = 'Bruce Willis';
Задание 15. Во сколько Стив Мартин (Steve Martin) прилетел в Лондон (London)?
SELECT time_in
FROM Trip
JOIN Pass_in_trip
ON Trip.id=Pass_in_trip.trip
JOIN Passenger
ON Pass_in_trip.passenger=Passenger.id
WHERE name='Steve Martin'
AND town_to='London';
Задание 16. Вывести отсортированный по количеству перелетов (по убыванию) и имени (по возрастанию) список пассажиров, совершивших хотя бы 1 полет.
SELECT name, COUNT(*) AS count
FROM Passenger
JOIN Pass_in_trip
ON Passenger.id=Pass_in_trip.passenger
GROUP BY passenger
HAVING COUNT(trip) > 0
ORDER BY COUNT(trip) DESC, name;
Задание 17. Определить, сколько потратил в 2005 году каждый из членов семьи
SELECT member_name, status, SUM(amount*unit_price) AS costs
FROM FamilyMembers
JOIN Payments
ON FamilyMembers.member_id=Payments.family_member
WHERE YEAR(date) = 2005
GROUP BY member_name, status;
Задание 18. Узнать, кто старше всех в семьe
SELECT member_name
FROM FamilyMembers
WHERE birthday = (SELECT MIN(birthday) FROM FamilyMembers);
Задание 19. Определить, кто из членов семьи покупал картошку (potato)
SELECT DISTINCT status
FROM FamilyMembers
JOIN Payments
ON FamilyMembers.member_id=Payments.family_member
JOIN Goods
ON Payments.good=Goods.good_id
WHERE good_name = 'potato';
Задание 20. Сколько и кто из семьи потратил на развлечения (entertainment). Вывести статус в семье, имя, сумму
SELECT fm.status, fm.member_name, SUM(p.amount*p.unit_price) AS costs
FROM FamilyMembers AS fm
JOIN Payments AS p
ON fm.member_id=p.family_member
JOIN Goods AS g
ON p.good=g.good_id
JOIN GoodTypes AS gt
ON g.type=gt.good_type_id
WHERE good_type_name = 'entertainment'
GROUP BY fm.status, fm.member_name;
Задание 21. Определить товары, которые покупали более 1 раза
SELECT good_name
FROM Goods
JOIN Payments
ON Goods.good_id=Payments.good
GROUP BY good
HAVING COUNT(good) > 1;
Задание 22. Найти имена всех матерей (mother)
SELECT member_name
FROM FamilyMembers
WHERE status = 'mother';
Ответы на задания 23-44 здесь.
Когда будут доступны ответы на задания с 67 по 76?
Уже готовы ответы на вопросы 67 -76