sql - 这个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 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
推荐阅读
- javascript - Finding punctuation marks in text with string-methods
- javascript - Javascript 删除集合
- php - 使用 array_pop 后返回已删除的项目
- android - 如何将数据从父视图的演示者传递给子视图的演示者?
- android - Kotlin Json 问题期望一个字符串,但在路径上是 BEGIN_OBJECT
- c# - 如何将UNO共享项目的文件内容作为字符串获取
- mysql - 选择在另一个字段中共享相同值的项目
- java - 对 List 调用 .sort 时出现 AbstractList UnsupportedOperationException
- php - 尽可能接近每天的时间运行 PHP 脚本
- javascript - 使用存储为对象属性的类方法时类实例丢失