Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Помогите с заданием  [new]
Delphi_Watcher
Member

Откуда:
Сообщений: 99
Добрый вечер всем. Помогите с заданием из книги по PostgreSQL. Уже второй день ломаю голову, пробую различные запросы/подзапросы. Не получается. А ответов на задания в книге нет. Выручайте.

Самые крупные самолеты в нашей авиакомпании — это Boeing 777-300. Выяс-
нить, между какими парами городов они летают, поможет запрос:

SELECT DISTINCT departure_city, arrival_city
FROM routes r
JOIN aircrafts a ON r.aircraft_code = a.aircraft_code
WHERE a.model = 'Boeing 777-300'
ORDER BY 1;


departure_city | arrival_city
----------------+--------------
Екатеринбург | Москва
Москва | Екатеринбург
Москва | Новосибирск
Москва | Пермь
Москва | Сочи
Новосибирск | Москва
Пермь | Москва
Сочи | Москва
(8 строк)

К сожалению, в этой выборке информация дублируется. Пары городов приведе-
ны по два раза: для рейса «туда» и для рейса «обратно». Модифицируйте запрос
таким образом, чтобы каждая пара городов была выведена только один раз:

departure_city | arrival_city
----------------+--------------
Москва | Екатеринбург
Новосибирск | Москва
Пермь | Москва
Сочи | Москва
(4 строки)

Сообщение было отредактировано: 2 апр 21, 18:53
2 апр 21, 18:58    [22303490]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заданием  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4691
Delphi_Watcher,

Этим вопросом и этой задачей на форуме слегка достали...

коротко и не совсем верно в общем случае но как решение пойдет
SELECT DISTINCT departure_city, arrival_city
FROM routes r
JOIN aircrafts a ON r.aircraft_code = a.aircraft_code
WHERE a.model = 'Boeing 777-300'

and departure_city>arrival_city

ORDER BY 1;



или вот так вот более формально корректно
SELECT DISTINCT 
greatest(departure_city, arrival_city), least(departure_city, arrival_city)

FROM routes r
JOIN aircrafts a ON r.aircraft_code = a.aircraft_code
WHERE a.model = 'Boeing 777-300'
ORDER BY 1;

https://www.postgresql.org/docs/13/functions-conditional.html#FUNCTIONS-GREATEST-LEAST

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
2 апр 21, 20:03    [22303507]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заданием  [new]
Delphi_Watcher
Member

Откуда:
Сообщений: 99
Maxim Boguk
Delphi_Watcher,

Этим вопросом и этой задачей на форуме слегка достали...

коротко и не совсем верно в общем случае но как решение пойдет
SELECT DISTINCT departure_city, arrival_city
FROM routes r
JOIN aircrafts a ON r.aircraft_code = a.aircraft_code
WHERE a.model = 'Boeing 777-300'

and departure_city>arrival_city

ORDER BY 1;



или вот так вот более формально корректно
SELECT DISTINCT 
greatest(departure_city, arrival_city), least(departure_city, arrival_city)

FROM routes r
JOIN aircrafts a ON r.aircraft_code = a.aircraft_code
WHERE a.model = 'Boeing 777-300'
ORDER BY 1;

https://www.postgresql.org/docs/13/functions-conditional.html#FUNCTIONS-GREATEST-LEAST

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru

Извините но я только изучаю. Про GREATEST и LEAST я не понял. В документации сказано что: Функции GREATEST и LEAST выбирают наибольшее или наименьшее значение из списка выражений.
В документации один абзац про GREATEST и LEAST. Даже примеров нет как их использовать. Вообщем я не понял((

Сообщение было отредактировано: 3 апр 21, 08:47
3 апр 21, 08:51    [22303627]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с заданием  [new]
Delphi_Watcher
Member

Откуда:
Сообщений: 99
Вроде разобрался, спасибо.
3 апр 21, 09:43    [22303640]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить