簡體   English   中英

計算來自多個列的不同值

[英]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;

這樣,您可以輕松地返回到達和離開的其他列,並且如果您想選擇某些機場,則可以在基表上使用索引。

最近相關答案:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM