Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara menghitung total jam perjalanan antara kota x dan y dan sebaliknya

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Saya Menyisipkan Byte[] Ke dalam Kolom VARBINARY SQL Server

  2. SQL :ANTARA vs <=dan>=

  3. Ubah jenis kolom dengan angka dari varchar menjadi int

  4. Tidak dapat mengecilkan basis data 'hanya baca' | Kecilkan Log Transaksi Saat Menggunakan Grup Ketersediaan AlwaysOn

  5. Tips Cepat untuk Memperbaiki dan Memulihkan Database SQL Tanpa Cadangan