当另一个字段已在 GROUP BY 中时,WHERE 大于计数的 SQL 查询

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)

但我不完全确定从这里去哪里。我相信有更好的方法来做到这一点。

谢谢!

Lin*_*ger 5

  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)