首页 > 解决方案 > 这个sql复杂的面试题的解决方法是什么?

问题描述

我很擅长 sql。我在面试中遇到过这个问题,无法弄清楚答案。

问题:有一个包含3 列(源、目的地、距离)的位置表,如下所示

地点:

Source - Destination - Distance
Hyderabad - Chennai - 700
Chennai - Hyderabad - 700
Hyderabad - Bangalore -650

如上所述,海得拉巴到钦奈或钦奈到海得拉巴都意味着相同,因为距离将始终相同。

所以我们需要编写查询,以便输出不应该有这种重复记录。

在上述情况下,输出应该是

地点:

Source - Destination - Distance
Hyderabad - Chennai - 700
Hyderabad - Bangalore -650

标签: sql

解决方案


如果您的 SQL DB/引擎支持 LEAST/GREATEST(这是一种 ISO 语法,其中很多都支持):

select  distinct
        least   (source, destination) as source
       ,greatest(source, destination) as destination
       ,distance

from    location

SQL Fiddle - Postgres
SQL Fiddle - MySQL
SQL Fiddle - Oracle

如果不:

select  distinct
        case when source < destination then source else destination end as source
       ,case when source < destination then destination else source end as destination
       ,distance

from    location

SQL Fiddle - SQLite
SQL Fiddle - SQL Server


推荐阅读