sql >> Database >  >> RDS >> Sqlserver

Hoe bereken je de totale reisuren tussen stad x en y en vice versa

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.


  1. Voeg veel rijen samen tot een enkele tekenreeks met groepering

  2. UNIEKE beperking versus controleren vóór INSERT

  3. Wat is een ODBC-compatibele database?

  4. Hoe kan ik de MySQLi-extensie inschakelen in PHP 7?