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