Vraag
U werkt voor een luchtvaartmaatschappij en u heeft een dataset ontvangen van de reistijd van Pilot tussen steden. U moet het wederzijdse bepalen en de totale reisuren tussen steden vinden. Dat betekent dat de reis van de piloot van stad '1' naar '2' en stad '2' naar '1' als één moet worden beschouwd en dat vervolgens het totale aantal reisuren moet worden berekend.
Schrijf een SQL-query om de verwachte output te bereiken.
Beantwoorden
Laten we eerst de testgegevens maken.
--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
Om het gewenste resultaat te bereiken, moet u de plaatsnamen binnen de rij in een bepaalde volgorde omwisselen. Dat betekent dat u de namen van_stad en tot_stad op een rij in oplopende of aflopende volgorde kunt sorteren en vervolgens de eerste stad kunt behouden als city_1
en de andere als stad_2. Om dit te doen, kunt u minder dan < . gebruiken of groter dan > operator op from_city
en to_city
.
Op deze manier kunt u de travel_time_hours
. verzamelen door city_1
te groeperen en 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
Dit is de oplossing die ik heb bedacht. Als je de output op een andere manier hebt bereikt, laat het me dan weten in reacties.
Meld u aan om deze interviewvragen rechtstreeks in uw inbox te ontvangen.