質問
あなたは航空会社で働いており、都市間のパイロットの移動時間のデータセットを受け取りました。逆数を決定し、都市間の合計移動時間を見つける必要があります。つまり、パイロットの都市「1」から「2」および都市「2」から「1」への移動を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
のままにしておくことができます。 もう1つはcity_2です。これを行うには、<未満を使用できます または>より大きい from_city
の演算子 およびto_city
。
このようにして、travel_time_hours
を集計できるようになります。 city_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
これが私が思いついた解決策です。他の方法で出力を達成した場合は、コメントで知らせてください。
サインアップして、これらの面接の質問を受信トレイで直接受け取ります。