首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从两列中选择DISTINCT +匹配值=“唯一”

问从两列中选择DISTINCT +匹配值=“唯一”
EN

Stack Overflow用户
提问于 2014-02-17 19:06:29
回答 1查看 824关注 0票数 3

我知道标题的措辞很糟糕,但我想不出更好的说法。

我正在学习Ruby,并在MySQL上提神。我使用一个已完成航班的历史列表作为实践数据集,大约有100,000行要处理。每一次飞行记录包括起始机场和目的地机场(字段“原产地”和“最优”)和总飞行距离(字段“距离”)。

作为一个练习,我想展示按距离下降排序的10条最长的路线。然而,我想把每对端点看作一个单一的路径,而不管哪个是起源,哪个是目的地。因此,例如,JFK和LAX应该被认为是一条单一的路由。

当我运行查询时:

代码语言:javascript
复制
SELECT DISTINCT distance, origin, dest FROM flights ORDER BY distance DESC LIMIT 10;

我当然明白了:

代码语言:javascript
复制
["2704", "BOS", "SFO"]
["2704", "SFO", "BOS"]
["2689", "BOS", "SJC"]
["2689", "SJC", "BOS"]
["2615", "LAX", "LIH"]
["2615", "LIH", "LAX"]
["2614", "HNL", "SAN"]
["2614", "SAN", "HNL"]
["2611", "BOS", "LAX"]
["2611", "LAX", "BOS"]

这不是我想要的。我想说的是,“选择10条最长航线的距离和终点,不管机场是始发地还是目的地。”

其中一个想法是按字母顺序对每一对端点进行排序,并将它们连接起来,以创建独特的路由,例如LAX和JFK = "JFKLAX“。但我不知道如何做到这一点,并将其传递给我的原始查询,或者即使这是最好的方法。

这能完全在SQL / MySQL中完成吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-17 19:14:19

一种简单的方法是使用LEAST()返回这两列的任意值,根据列的排序规则排序更高或更低。然后,它们总是以相同的位置返回,并且DISTINCT会去复制它们。

代码语言:javascript
复制
SELECT DISTINCT
  distance,
  LEAST(origin, dest) AS endpoint1,
  GREATEST(origin, dest) AS endpoint2
FROM flights f
ORDER BY distance DESC LIMIT 10

在这里,它在广场上运行。

例如,LEAST('BOS', 'SFO')总是返回'BOS',而GREATEST('BOS', 'SFO')总是返回'SFO'。无论顺序如何,当行被并列时,结果是相同的,因此DISTINCT将正确应用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21837276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档