L'objectif est de créer une carte visuelle des sièges pour un modèle d'avion spécifique (ici, le 'Boeing 777-300'). Le résultat doit être une liste de rangées, où pour chaque rangée et classe de service ('Business', 'Économie', 'Confort'), un tableau des sièges disponibles est affiché.
Par exemple, pour la 1ère rangée en classe business :
Étape 1 : Sélection du bon avion.
seats et aircrafts_data sur le champ commun aircraft_code.WHERE le modèle d'avion souhaité.Étape 2 : Séparer le numéro de siège en rangée et lettre.
seats est du type 12A, 30K, où 12 est la rangée et A la lettre du siège.seat_no (par exemple avec la fonction rtrim ou des expressions régulières).seat_no (par exemple avec la fonction right).Étape 3 : Regrouper les sièges.
fare_conditions).GROUP BY doit donc inclure la rangée calculée et la classe de service.Étape 4 : Agréger les lettres de sièges dans un tableau.
A, B, C, etc.) dans une liste ou un tableau.json_agg (PostgreSQL) est idéale, elle crée un tableau JSON à partir des valeurs.json_agg.Étape 5 : Tri final.
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->>'fr' = 'Boeing 777-300'
group by rtrim(seat_no, 'ABCDEFGHKJ'), fare_conditions
order by "row";