Fråga
Du arbetar för ett flygbolag och du har fått en datauppsättning av Pilots restid mellan städer. Du måste bestämma ömsesidigheten och hitta den totala restiden mellan städer. Det betyder att pilotens resa från stad '1' till '2' och stad '2' till '1' bör betraktas som en och sedan måste den totala restiden beräknas.
Skriv en SQL-fråga för att uppnå förväntad utdata.
Svar
Låt oss skapa testdata först.
--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
För att uppnå önskat resultat bör du byta stadsnamn inom raden baserat på någon ordning. Det betyder att du kan sortera from_city och to_city namnen i rad i stigande eller fallande ordning och sedan behålla den första staden som city_1
och den andra som stad_2. För att göra detta kan du använda mindre än < eller större än > operatör på from_city
och to_city
.
På så sätt kommer du att kunna sammanställa travel_time_hours
genom att gruppera city_1
och 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
Det här är lösningen jag har kommit på. Om du har uppnått resultatet på annat sätt, låt mig veta i kommentarerna.
Registrera dig för att få dessa intervjufrågor direkt i din inkorg.