🙏 Realmente necesitamos su apoyo. Necesitamos financiamiento para continuar nuestra misión: publicar nuevas lecciones y mejorar la plataforma. Si puede, por favor apoye el proyecto con una donación. Ayude al proyecto ahora →
Código SQL copiado al portapapeles

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)

  1. 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 seats con la tabla aircrafts_data en el campo común aircraft_code.
    • Luego, en la cláusula WHERE, especifica el modelo de aeronave deseado.
  2. Paso 2: Dividir el Número de Asiento en Fila y Letra.

    • El número de asiento en la tabla seats tiene un formato como 12A, 30K, donde 12 es el número de fila y A es 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ón rtrim o expresiones regulares.
    • La letra del asiento se puede obtener tomando el último carácter de la cadena seat_no (por ejemplo, con la función right).
  3. 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 BY debe incluir tanto el número de fila calculado como la clase de servicio.
  4. 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.
  5. 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";