计算来自多列的不同值

Counting distinct values from multiple columns

给定以下架构:

id departure arrival
0  BOS       LAX
1  SFO       SEA
2  MIA       LAX
3  RDU       BOS
4  JFK       DEN
5  LAX       SEA

我需要计算每个机场出现的总次数。比如BOS应该是2(一离一到)。

我可以通过两个单独的查询来做到这一点:

SELECT departure, COUNT(*) FROM legs
GROUP BY departure ORDER BY COUNT(departure) DESC

SELECT arrival, COUNT(*) FROM legs
GROUP BY arrival ORDER BY COUNT(arrival) DESC

但我无法在一个查询中找出或找到一种方法来完成它。我想要如下内容:

airport count
BOS     2
LAX     2
SEA     2
JFK     1

union做:

select departure as airport, count(*) as count
from (select departure from legs
      union all
      select arrival from legs)t
group by departure

对两个单独的聚合使用 FULL [OUTER] JOIN

SELECT airport, COALESCE(d.ct, 0) + COALESCE(a.ct, 0) AS "count"
FROM  (
   SELECT departure AS airport, count(*) AS ct
   FROM   legs
   GROUP  BY 1
   ) d
FULL JOIN (
   SELECT arrival AS airport, count(*) AS ct
   FROM   legs
   GROUP  BY 1
   ) a USING (airport)
ORDER  BY "count" DESC, airport;

通过这种方式,您可以轻松地 return 额外的到达和离开列,如果您想要 select 某些机场,您可以使用基于 table 的索引。

最近的相关回答: