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

标签 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

MARKETS 是有关机场可以进入的不同市场的信息。它包含一个 ID(主键)和 NAME 字段。像这样:

30576   Baglung, Nepal
30577   Binghamton, NY
30578   Bruggen, Germany
30579   Bergen, Norway

STATES 包含有关美国各州的信息,使用政府的 FIPS 代码。它包含字段 FIPS(主键)、NAME 和 ABBR(缩写)。像这样:

1   ALABAMA  AL
2   ALASKA   AK
4   ARIZONA  AZ
5   ARKANSAS AR

我正在尝试编写一个 SQL 查询,输出 在多个州拥有机场的市场中所有机场的 AIRPORTS.NAME、MARKETS.NAME 和 STATES.ABBR 字段,我想在不创建 View 的情况下做到这一点。我得到的查询显示所有 MARKETS.ID 有超过 2 个机场:

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

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

谢谢!

最佳答案

  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

关于sql - 当另一个字段已经在 GROUP BY 中时,WHERE 大于计数的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20087551/

相关文章:

mysql - 添加列并根据条件填充升序数字

sql - 如何避免在 sql 查询中使用多个 CAST?

sql - 使用 SQL 查询计算两个具有相同名称的不同列中的重复项

java - 如何使用 LEFT JOIN 创建 JPA NamedQuery

php - 我如何左连接 3 个表并为 3 个不同表中的多个字段创建变量?

连接时 SQL 计数变得疯狂

java - Liferay 6.2自定义连接同名列重叠

sql - 连接时避免字符串和序列之间有空格

java - 如何使用Java调用Oracle数据库中IN和OUT参数的存储函数

Jquery .map().join (", ") 文本未加入逗号 (,)