我有一个包含航班的数据库表。 (出发地/目的地在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
答案 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)