도시 x와 y 사이 또는 그 반대로의 총 이동 시간을 계산하는 방법

의문



당신은 항공사에서 일하고 있고 파일럿의 도시 간 이동 시간 데이터 세트를 받았습니다. 역수를 결정하고 도시 간의 총 이동 시간을 찾아야 합니다. 즉, 조종사가 '1'에서 '2'로 이동하고 도시 '2'에서 '1'로 이동한 거리를 하나로 간주하여 총 이동 시간을 계산해야 합니다.

예상 출력을 달성하기 위해 SQL 쿼리를 작성하십시오.



대답



먼저 테스트 데이터를 생성해 보겠습니다.

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



원하는 결과를 얻으려면 순서에 따라 행 내에서 도시 이름을 바꿔야 합니다. 즉, from_city 및 to_city 이름을 오름차순 또는 내림차순으로 연속 정렬한 다음 첫 번째 도시를 city_1로 유지하고 다른 도시를 city_2로 유지할 수 있습니다. 이렇게 하려면 from_cityto_city 에서 보다 작거나 보다 큼 > 연산자를 사용할 수 있습니다.



이렇게 하면 travel_time_hourscity_1 를 그룹화하여 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



이것이 내가 생각해 낸 해결책입니다. 다른 방법으로 결과를 얻으셨다면 댓글로 알려주세요.

Sign up 이 인터뷰 질문을 받은 편지함으로 직접 받으십시오.

좋은 웹페이지 즐겨찾기