Pertanyaan
Anda bekerja untuk perusahaan penerbangan dan Anda telah menerima kumpulan data waktu perjalanan Pilot antar kota. Anda perlu menentukan kebalikannya dan menemukan total jam perjalanan antar kota. Artinya, perjalanan pilot dari kota '1' ke '2' dan kota '2' ke '1' harus dianggap sebagai satu dan kemudian total jam perjalanan harus dihitung.
Tulis kueri SQL untuk mencapai hasil yang diharapkan.
Jawaban
Mari kita buat data pengujiannya terlebih dahulu.
--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
Untuk mencapai hasil yang diinginkan, Anda harus menukar nama kota di dalam baris berdasarkan beberapa urutan. Artinya, Anda dapat mengurutkan nama from_city dan to_city secara berurutan dalam urutan menaik atau menurun, lalu menyimpan kota pertama sebagai city_1
dan yang lainnya sebagai city_2. Untuk melakukan ini, Anda dapat menggunakan kurang dari < atau lebih besar dari > operator di from_city
dan to_city
.
Dengan cara ini Anda akan dapat menggabungkan travel_time_hours
dengan mengelompokkan city_1
dan 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
Ini adalah solusi yang saya buat. Jika Anda telah mencapai hasil dengan cara lain, beri tahu saya di komentar.
Daftar untuk menerima pertanyaan wawancara ini langsung di kotak masuk Anda.