sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man beräknar totala resttimmar mellan stad x och y och vice versa

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.


  1. Personsökning med Oracle

  2. Hur kan jag infoga i en BLOB-kolumn från en insert-sats i sqldeveloper?

  3. LAST_DAY() Funktion i Oracle

  4. Lista över främmande nycklar och tabellerna de refererar till i Oracle DB