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