Frage
Sie arbeiten für eine Fluggesellschaft und haben einen Datensatz der Reisezeit des Piloten zwischen Städten erhalten. Sie müssen den Kehrwert bestimmen und die Gesamtreisezeit zwischen den Städten ermitteln. Das heißt, die Fahrt des Piloten von Stadt '1' nach '2' und Stadt '2' nach '1' sollte als eine betrachtet werden und dann müssen die gesamten Reisestunden berechnet werden.
Schreiben Sie eine SQL-Abfrage, um die erwartete Ausgabe zu erzielen.
Antwort
Lassen Sie uns zuerst die Testdaten erstellen.
--create test data
USE demo;
CREATE TABLE dbo.travel_detail (
id int identity(1,1),
from_city varchar(100),
to_city varchar(100),
travel_time_hours smallint
)
GO
INSERT INTO dbo.travel_detail values
('Oslo','Helsinki',125),
('Helsinki','Oslo',110),
('Stockholm','Oslo',132),
('Oslo','Stockholm',180),
('Copenhagen','Helsinki',148),
('Helsinki','Copenhagen',84),
('Stockholm','Copenhagen',116),
('Helsinki','Stockholm',124)
GO
SELECT * FROM dbo.travel_detail
--clean up
--USE demo;
--DROP TABLE dbo.travel_detail
Um das gewünschte Ergebnis zu erzielen, sollten Sie die Städtenamen innerhalb der Zeile in einer bestimmten Reihenfolge vertauschen. Das heißt, Sie können die from_city- und to_city-Namen hintereinander in aufsteigender oder absteigender Reihenfolge sortieren und dann die erste Stadt als city_1
beibehalten und die andere als city_2. Dazu können Sie weniger als < verwenden oder größer als > Betreiber auf from_city
und to_city
.
Auf diese Weise können Sie die travel_time_hours
aggregieren indem Sie city_1
gruppieren und city_2
.
--solution
USE demo;
select
city_1,
city_2,
total_travel_hours = sum(travel_time_hours)
from (
select
city_1 = case when from_city < to_city then from_city else to_city end,
city_2 = case when from_city > to_city then from_city else to_city end,
travel_time_hours
from dbo.travel_detail
)x
group by city_1, city_2
order by city_1, city_2
Das ist die Lösung, die ich mir ausgedacht habe. Wenn Sie die Ausgabe auf andere Weise erreicht haben, lassen Sie es mich in den Kommentaren wissen.
Melden Sie sich an, um diese Interviewfragen direkt in Ihren Posteingang zu erhalten.