ALMMÄÄCHD - SQL-QUERY
-
Hi,
ich hab ne SQL Anfrage zu stellen, und weiss hinten und vorne ned, wie ich das lösen soll:
"Der Flug mit der Flugnummer US80 führt über fünf Intervalle vom SEATTLE/TACOMA
INTERNATIONAL Airport zum PHILADELPHIA INTERNATIONAL Airport. Die Gesamtkosten
betragen $1922 für alle fünf Intervalle in der Economy-Class. Angenommen ein Student
hat nur noch $1200 in seiner Tasche und will diese Strecke zurücklegen. Formulieren Sie eine
Anfrage, welche die ersten n Intervalle zusammen mit ihren Zielflughäfen und den kumulierten
Flugpreisen bis zu diesen Flughäfen ausgibt, die der Student mit seinen $1200 buchen kann. Ab
welchem Flughafen muss er trampen?
Hinweis: Es ist eine Subquery nötig mit Self-Join über der Relation flight_intervals."Meine Tabellen schauen so aus:
CREATE TABLE aircraft_type ( aircraft_code varchar2(3) PRIMARY KEY, aircraft_description varchar2(64), manufacturer varchar2(22), engines integer, wide_body varchar2(3) CONSTRAINT wide_body_ck CHECK (wide_body IN ('YES', 'NO')), wing_span number, length number, weight integer, pay_load integer, cruising_speed integer, range_miles integer) CREATE TABLE aircraft ( aircraft_id integer PRIMARY KEY, aircraft_code varchar2(3) CONSTRAINT aircraft_aircraft_code_fk REFERENCES aircraft_type, state varchar2(20)) CREATE TABLE airline ( airline_code varchar2(3) PRIMARY KEY, airline_name varchar2(64)) CREATE TABLE airport ( airport_code INTEGER PRIMARY KEY, airport_name varchar2(40), airport_location varchar2(36), country_name varchar2(25)) CREATE TABLE flight ( flight_number varchar2(8) PRIMARY KEY, airline_code varchar2(3) CONSTRAINT fligt_airline_code_fk REFERENCES airline, aircraft_id integer CONSTRAINT flight_aircraft_id_fk REFERENCES aircraft) CREATE TABLE flight_intervals ( flight_id integer PRIMARY KEY, flight_number varchar2(8) CONSTRAINT fi_flight_number_fk REFERENCES flight, from_airport INTEGER CONSTRAINT fi_from_airport_fk REFERENCES airport(airport_code), to_airport INTEGER CONSTRAINT fi_to_airport_fk REFERENCES airport(airport_code), departure_time date, arrival_time date) CREATE TABLE passenger ( passenger_id integer PRIMARY KEY, name varchar2(30), address varchar2(80)) CREATE TABLE booking_class ( booking_class_id varchar2(1) PRIMARY KEY, booking_class_description varchar2(40)) CREATE TABLE booking ( passenger_id integer CONSTRAINT booking_passenger_id_fk REFERENCES passenger, flight_id integer CONSTRAINT booking_flight_id_fk REFERENCES flight_intervals, booking_class_id varchar2(1) CONSTRAINT booking_booking_class_id_fk REFERENCES booking_class, PRIMARY KEY (passenger_id, flight_id)) CREATE TABLE fare ( flight_id integer CONSTRAINT fare_flight_id_fk REFERENCES flight_intervals, booking_class_id varchar2(1) CONSTRAINT fare_booking_class_id_fk REFERENCES booking_class, price integer, PRIMARY KEY (flight_id, booking_class_id)) CREATE TABLE capacity ( aircraft_id integer CONSTRAINT capacity_aircraft_id_fk REFERENCES aircraft, booking_class_id varchar2(1) CONSTRAINT capacity_booking_class_id_fk REFERENCES booking_class, capacity integer, PRIMARY KEY (aircraft_id, booking_class_id)) storage ( initial 195k next 5k pctincrease 0);
Ich kam soweit, dass ich mir die Flugabschnitte und deren Preis anzeigen lassen konnte:
SELECT fi.from_airport_name, fi.to_airport_name, f.price FROM (SELECT fi.flight_id, af.airport_name from_airport_name, at.airport_name to_airport_name FROM flight_intervals fi, airport af, airport at WHERE fi.from_airport = af.airport_code AND fi.to_airport = at.airport_code AND fi.flight_number = 'US80') fi, fare f, booking_class b WHERE b.booking_class_description = 'ECONOMY CLASS' AND f.booking_class_id = b.booking_class_id AND f.flight_id = fi.flight_id ;
Vielleicht hat ja jemand Zeit und Lust da bisschen dran rumzuknobeln, wär ich sehr dankbar für.
Grüße,
Jojo
-
Lustig
-
Was bekommst du wenn du noch ORDER BY departure_time HAVING(SUM(f.price) < 1200) anhängst?
-
grad gar nix, weil der db server down is.
ich probiers heude abend mal.
-
also wenn ich das dran häng, dann kommd ne fehlermeldung.
aber wenn ich drüber nachdenk, dann kann das eigentlich eh ned das ergebnis geben...
-
also ich mo gestehn, ich krichs ned hin...
-
Hab die Lösung gekricht:
select a.airport_name, fi.flight_id, tmp.cum_price from flight_intervals fi, airport a, (select sum(fa.price) as cum_price, fi1.flight_id from fare fa, flight_intervals fi1, flight_intervals fi2 where fi1.departure_time >= fi2.departure_time and fa.flight_id = fi2.flight_id and UPPER(fi1.flight_number) like 'US80' and UPPER(fi2.flight_number) like 'US80' and UPPER(fa.booking_class_id) like 'E' group by fi1.flight_id,fi1.departure_time order by fi1.departure_time) tmp where fi.flight_id = tmp.flight_id and a.airport_code = fi.to_airport and tmp.cum_price < 1200;