sql >> Databáze >  >> RDS >> Sqlserver

Jak vypočítat celkové hodiny cesty mezi městem x a y a naopak

Otázka

Pracujete pro leteckou společnost a obdrželi jste datovou sadu pilotova cestovního času mezi městy. Musíte určit reciproční a zjistit celkovou dobu cestování mezi městy. To znamená, že pilotova cesta z města '1' do '2' a města '2' do '1' by měla být považována za jednu a poté je třeba vypočítat celkovou dobu cesty.

Napište SQL dotaz, abyste dosáhli očekávaného výstupu.

Odpověď

Nejprve vytvoříme testovací data.

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

Chcete-li dosáhnout požadovaného výsledku, měli byste si vyměnit názvy měst v řadě na základě určitého pořadí. To znamená, že můžete seřadit názvy z_města a do_města za sebou ve vzestupném nebo sestupném pořadí a poté ponechat první město jako city_1 a druhý jako město_2. K tomu můžete použít méně než < nebo větší než > operátor na from_city a to_city .

Tímto způsobem budete moci agregovat travel_time_hours seskupením city_1 a 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

Toto je řešení, na které jsem přišel. Pokud jste dosáhli výstupu jiným způsobem, dejte mi vědět v komentářích.

Přihlaste se k odběru těchto otázek na pohovor přímo do vaší schránky.


  1. CHECK CONSTRAINT na více sloupcích

  2. Jak nainstalovat MySQL na Windows

  3. Porovnání databází MySQL

  4. Aktivní relace a stav SQL serveru