我有一个包含航班的数据库表。(始发地/目的地在国际航空运输协会机场代码中。)

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

最佳答案

更简单的方法是使用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)

09-25 16:25