Sql 从多个列中计算不同的值

Sql 从多个列中计算不同的值,sql,postgresql,aggregate-functions,Sql,Postgresql,Aggregate Functions,给定以下模式: 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

给定以下模式:

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

但我还没能在一个查询中找到解决方法。我想要如下的东西:

airport count
BOS     2
LAX     2
SEA     2
JFK     1

使用
接头执行此操作

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

使用
接头执行此操作

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

在两个单独的聚合上使用
完全[外部]连接

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;
通过这种方式,您可以轻松地为到达和离开返回其他列,并且如果您希望选择某些机场,可以使用基表上的索引

最近的相关答复:


在两个单独的聚合上使用
完全[外部]连接

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;
通过这种方式,您可以轻松地为到达和离开返回其他列,并且如果您希望选择某些机场,可以使用基表上的索引

最近的相关答复:


为了给出准确的期望结果,
作为机场出发,计数(*)作为计数
从逻辑上讲,在内部查询中添加“airport”别名可能最有意义。为了给出准确的期望结果,
作为机场出发,计数(*)从逻辑上讲,在内部查询中添加“airport”别名可能最有意义。