Mic*_*man 3 sql oracle join count subquery
(我很高兴欢迎更好的标题建议)
我正在尝试在 Oracle 中编写一个 SQL 查询,该查询只输出条目,其中一个字段的计数高于某个值。
具体来说,我有表 AIRPORTS、MARKETS 和 STATES。
AIRPORTS 表是关于具有字段 ID(主键)、NAME、ABBR(缩写)、MARKET(来自 MARKETS 表的外键)、STATE(来自 STATE 表的外键)和 CITY 的机场的信息。像这样:
14122 PITTSBURGH INTERNATIONAL PIT 30198 42 PITTSBURGH, PA
14150 PELLSTON REGIONAL AIRPORT PLN 34150 26 PELLSTON, MI
14193 PENSACOLA GULF COAST REGIONAL PNS 33728 12 PENSACOLA, FL
Run Code Online (Sandbox Code Playgroud)
MARKETS 是关于机场可以进入的不同市场的信息。它包含一个 ID(主键)和 NAME 字段。像这样:
30576 Baglung, Nepal
30577 Binghamton, NY
30578 Bruggen, Germany
30579 Bergen, Norway
Run Code Online (Sandbox Code Playgroud)
STATES 包含有关美国各州的信息,使用政府的 FIPS 代码。它包含字段 FIPS(主键)、NAME 和 ABBR(缩写)。像这样:
1 ALABAMA AL
2 ALASKA AK
4 ARIZONA AZ
5 ARKANSAS AR
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个 SQL 查询,该查询输出市场中所有机场的 AIRPORTS.NAME、MARKETS.NAME 和 STATES.ABBR 字段,该市场的机场处于多个状态,我想在不创建的情况下执行此操作一个看法。我已经得到了一个查询,该查询显示了超过 2 个机场的所有 MARKETS.ID:
SELECT *
FROM(
SELECT markets.id as "market", count(markets.name) as "airports"
FROM markets
INNER JOIN airports
ON airports.market = markets.id
GROUP BY markets.id)
WHERE "airports" > 2
Run Code Online (Sandbox Code Playgroud)
但我不完全确定从这里去哪里。我相信有更好的方法来做到这一点。
谢谢!
SELECT m.id AS market, COUNT(*) AS airports
FROM markets AS m
INNER JOIN airports AS a
ON a.market = m.id
GROUP BY m.id
HAVING COUNT(*) > 2
Run Code Online (Sandbox Code Playgroud)