计算来自多列的不同值
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 的索引。
最近的相关回答:
给定以下架构:
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 的索引。
最近的相关回答: