Прямой рейс из города в город часто бывает дороже, чем два рейса с остановкой в узловом городе.
Путешественники могут сэкономить еще больше денег, разбив поездку на три рейса с двумя остановками.
У вас есть таблица с отдельными рейсами из аэропорта в аэропорт, содержащая следующие столбцы:
- id - уникальный идентификатор рейса;
- origin - город отправления текущего рейса;
- пункт назначения - город назначения текущего рейса;
- cost - стоимость текущего рейса.
Нам нужно создать единый запрос или процедуру, которая перечислит все самые дешевые поездки, которые можно совершить за две или меньше остановок. Выходные данные должны содержать столбцы origin, destination, stop (с указанием количества остановок в текущей поездке) и total_cost.
Если две поездки стоят одинаково, но имеют разное количество остановок, включите ту, у которой меньше всего остановок.
Сортировка выходной таблицы по происхождению, затем по месту назначения.
Примечание: рейс из SFO в JFK считается отличным от полета из JFK в SFO.
Пример для заданных полетов стола
|id| origin | destination | cost |
|--+--------+-------------+------|
| 1| SFO | JFK | 500 |
| 2| SFO | DFW | 200 |
| 3| SFO | MCO | 400 |
| 4| DFW | MCO | 100 |
| 5| DFW | JFK | 200 |
| 6| JFK | LHR | 1000 |
вывод должен быть
| origin | destination | stops | total_cost |
|--------|-------------|-------|------------|
| DFW | JFK | 0 | 200 |
| DFW | LHR | 1 | 1200 |
| DFW | MCO | 0 | 100 |
| JFK | LHR | 0 | 1000 |
| SFO | DFW | 0 | 200 |
| SFO | JFK | 1 | 400 |
| SFO | LHR | 2 | 1400 |
| SFO | MCO | 1 | 3000 |
То, что мне удалось сделать, можно найти по этой ссылке https://www.db-fiddle.com/f/2djkYh2zKb9nzUQYaWNCrn/1
Это запросы, которые я выполняю
CREATE TABLE flights (id int,origin varchar(3),destination varchar(3),cost int);
insert into flights values
(1,'SFO','JFK',500),
(2,'SFO','DFW',200),
(3,'SFO','MCO',400),
(4,'DFW','MCO',100),
(5,'DFW','JFK',200),
(6,'JFK','LHR',1000);
select a.origin,b.destination,sum(b.destination) as stops,
MIN(ifnull(a.cost, 0) + ifnull(b.cost, 0)) as total_cost from flights a
cross join flights b
group by origin, destination
Мой результат далеко не тот, что требуется. Я также пробовал то же самое с внешним соединением, но все еще не смог достичь желаемого результата. Результат должен быть возвращен через хранимую процедуру, определение которой
CREATE PROCEDURE get_cheapest_flights()
BEGIN
QUERY
END //