Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment calculer le nombre total d'heures de trajet entre la ville x et y et vice versa

Question

Vous travaillez pour une compagnie aérienne et vous avez reçu un ensemble de données sur le temps de trajet de Pilot entre les villes. Vous devez déterminer l'inverse et trouver le nombre total d'heures de trajet entre les villes. Cela signifie que le voyage du pilote de la ville '1' à '2' et de la ville '2' à '1' doit être considéré comme un, puis le total des heures de voyage doit être calculé.

Écrivez une requête SQL pour obtenir le résultat attendu.

Répondre

Créons d'abord les données de test.

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

Pour obtenir le résultat souhaité, vous devez échanger les noms de ville dans la ligne en fonction d'un certain ordre. Cela signifie que vous pouvez trier les noms from_city et to_city dans une ligne par ordre croissant ou décroissant, puis conserver la première ville en tant que city_1 et l'autre comme city_2. Pour ce faire, vous pouvez utiliser moins de < ou supérieur à > opérateur sur from_city et to_city .

De cette façon, vous pourrez agréger les travel_time_hours en regroupant city_1 et 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

C'est la solution que j'ai trouvé. Si vous avez obtenu le résultat d'une autre manière, faites-le moi savoir dans les commentaires.

Inscrivez-vous pour recevoir ces questions d'entretien directement dans votre boîte de réception.