sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan beregnes samlede rejsetimer mellem by x og y og omvendt

Spørgsmål

Du arbejder for et flyselskab, og du har modtaget et datasæt over Pilots rejsetid mellem byer. Du skal bestemme den gensidige og finde de samlede rejsetimer mellem byer. Det betyder, at pilotens rejse fra by '1' til '2' og by '2' til '1' skal betragtes som én, og derefter skal de samlede rejsetimer beregnes.

Skriv en SQL-forespørgsel for at opnå det forventede output.

Svar

Lad os først oprette testdataene.

--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

For at opnå det ønskede resultat, bør du bytte bynavnene i rækken baseret på en rækkefølge. Det betyder, at du kan sortere from_city og to_city navnene i en række i stigende eller faldende rækkefølge og derefter beholde den første by som city_1 og den anden som by_2. For at gøre dette kan du bruge mindre end < eller større end > operatør på from_city og to_city .

På denne måde vil du være i stand til at aggregere travel_time_hours ved at gruppere city_1 og 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 er den løsning, jeg har fundet på. Hvis du har opnået output på anden måde, så lad mig det vide i kommentarer.

Tilmeld dig for at modtage disse interviewspørgsmål direkte i din indbakke.


  1. Hvordan kopierer man en post i en SQL-tabel, men udskifter det unikke id for den nye række?

  2. Hvad gør 'COLLATE SQL_Latin1_General_CP1_CI_AS'?

  3. Hvornår skal du skifte til en større RDS-instans

  4. Ydeevnegrænser for logiske replikeringsløsninger