SQL按多列中的值对进行分组并消除相同的元组

时间:2014-01-15 20:22:02

标签: mysql sql duplicates

我有一个包含航班的数据库表。 (出发地/目的地在IATA机场代码中。)

id   origin   destination
1    AMS      BON
2    BON      AMS
3    EIN      GDN
4    GDN      EIN
5    EIN      GDN
6    AMS      AGP

我试图找出每两个机场之间的航班数量,无论航班的方向如何。所以我正在寻找这个结果:

origin    destination    count
AMS       BON            2
EIN       GDN            3
AMS       AGP            1

到目前为止我的查询是:

SELECT c.origin, c.destination, count(c.origin) as count FROM 
(
SELECT a.origin as origin, a.destination as destination FROM Flights a 
UNION ALL SELECT b.destination as origin, b.origin as destination FROM Flights b 
) c 
GROUP BY origin, destination;

这给出了以下结果:

origin    destination    count
AMS       BON            2
BON       AMS            2
EIN       GDN            3
GDN       EIN            3
AMS       AGP            1

所以问题是有重复的元组。我如何消除这些?

这似乎与这个问题类似,但我恐怕不够相似。 Eliminate tuples with reverse relation and no primary Key

1 个答案:

答案 0 :(得分:4)

更简单的方法是使用least()greatest()

SELECT least(origin, destination) as city1,
       greatest(origin, destination) as city2, count(*) as cnt
FROM Flights f
GROUP BY least(origin, destination), greatest(origin, destination)