Explicación de la Tarea del Mapa de Asientos de Aeronaves
Objetivo Principal de la Tarea
La tarea consiste en crear un mapa visual de asientos para un modelo específico de aeronave (en este caso, 'Boeing 777-300'). El resultado debe ser una lista de filas, donde para cada fila y clase de servicio ('Business', 'Economy', 'Comfort'), se muestre un arreglo de asientos disponibles.
Por ejemplo, para la 1ra fila de clase business, podría verse así:
- Fila: 1
- Asientos: ["A", "C", "D", "F"]
- Clase: Business
Lógica de la Solución (Paso a Paso)
Paso 1: Seleccionar la Aeronave Correcta.
- Primero, necesitas filtrar los datos para trabajar solo con los asientos que pertenecen al modelo 'Boeing 777-300'.
- Para hacer esto, necesitas unir la tabla
seatscon la tablaaircrafts_dataen el campo comúnaircraft_code. - Luego, en la cláusula
WHERE, especifica el modelo de aeronave deseado.
Paso 2: Dividir el Número de Asiento en Fila y Letra.
- El número de asiento en la tabla
seatstiene un formato como12A,30K, donde12es el número de fila yAes la letra del asiento en la fila. - El número de fila se puede obtener eliminando la parte de la letra de la cadena
seat_no. Por ejemplo, usando la funciónrtrimo expresiones regulares. - La letra del asiento se puede obtener tomando el último carácter de la cadena
seat_no(por ejemplo, con la funciónright).
- El número de asiento en la tabla
Paso 3: Agrupar los Asientos.
- La idea principal es agrupar todos los asientos que están en la misma fila y pertenecen a la misma clase de servicio (
fare_conditions). - Por lo tanto, la cláusula
GROUP BYdebe incluir tanto el número de fila calculado como la clase de servicio.
- La idea principal es agrupar todos los asientos que están en la misma fila y pertenecen a la misma clase de servicio (
Paso 4: Agregar Letras de Asiento en un Arreglo.
- Para cada grupo (por ejemplo, "fila 10, clase económica"), necesitamos recopilar todas las letras de los asientos (
A,B,C, etc.) en una sola lista o arreglo. - La función de agregado
json_agg(en PostgreSQL) es ideal para esto, ya que crea un arreglo JSON a partir de los valores. - Para asegurar que los asientos en el arreglo estén en el orden correcto (A, B, C, no C, A, B), se debe agregar un orden dentro de la función
json_agg.
- Para cada grupo (por ejemplo, "fila 10, clase económica"), necesitamos recopilar todas las letras de los asientos (
Paso 5: Ordenamiento Final.
- Para que el mapa de asientos se vea lógico (filas que van de adelante hacia atrás en el avión), el resultado final debe ordenarse por el número de fila.
Revelar: la consulta SQL con la solución está oculta a continuación. Haz clic para revelar.
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";