Задача заключается в том, чтобы создать визуальную карту мест для конкретной модели самолета (в данном случае, 'Boeing 777-300'). Результат должен представлять собой список рядов, где для каждого ряда и класса обслуживания ('Business', 'Economy', 'Comfort') показан массив доступных мест.
Например, для 1-го ряда бизнес-класса это может выглядеть так:
Шаг 1: Выбор нужного самолета.
seats (места) с таблицей aircrafts_data (данные о самолетах) по общему полю aircraft_code.WHERE указать нужную модель самолета.Шаг 2: Разделение номера места на ряд и букву.
seats имеет формат типа 12A, 30K, где 12 — это номер ряда, а A — буква места в ряду.seat_no. Например, с помощью функции rtrim или регулярных выражений.seat_no (например, функцией right).Шаг 3: Группировка мест.
fare_conditions).GROUP BY должен включать и вычисленный номер ряда, и класс обслуживания.Шаг 4: Агрегация букв мест в массив.
A, B, C и т.д.) в единый список или массив.json_agg (в PostgreSQL), которая создает JSON-массив из значений.json_agg необходимо добавить сортировку по букве места.Шаг 5: Финальная сортировка.
select
rtrim(seat_no, 'ABCDEFGHKJ')::int "row",
json_agg(right(seat_no, 1) order by right(seat_no, 1)) seats ,
fare_conditions
from seats
join aircrafts_data using(aircraft_code)
where aircrafts_data.model->>'en' = 'Boeing 777-300'
group by rtrim(seat_no, 'ABCDEFGHKJ'), fare_conditions
order by "row";