SQL ACADEMY ответы и решения заданий (часть 1, задания 1-22)

SQL Academy (ответы и решения заданий 1-22)
SQL Academy (ответы и решения заданий 1-22)

Ниже представлены наши варианты решения заданий из онлайн тренажера на сайте SQL ACADEMY (sql-academy.org). Ответы на 66 заданий представленные в онлайн тренажере разбиты на 3 части. Здесь, в первой части, представлены ответы на первые 22 задания.

Ответы на задания 23-44 здесь.

Ответы на задания 45-66 будут тут.

Задание 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 здесь.

Задать вопрос

Ваш адрес email не будет опубликован. Обязательные поля помечены *