प्रश्न
आप एक एयरलाइन कंपनी के लिए काम कर रहे हैं और आपको शहरों के बीच पायलट के यात्रा समय का एक डेटासेट प्राप्त हुआ है। आपको पारस्परिक निर्धारित करने और शहरों के बीच कुल यात्रा घंटे खोजने की आवश्यकता है। इसका मतलब है कि पायलट की शहर '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
के रूप में रख सकते हैं और दूसरा शहर_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
यही वह समाधान है जिसके साथ मैं आया हूं। यदि आपने अन्य तरीके से आउटपुट हासिल किया है, तो मुझे टिप्पणियों में बताएं।
इन साक्षात्कार प्रश्नों को सीधे अपने इनबॉक्स में प्राप्त करने के लिए साइन अप करें।