当GROUP BY中已有其他字段时,WHERE大于计数的SQL查询
(我非常欢迎更好的标题建议) 我试图在Oracle中编写一个SQL查询,该查询只输出一个字段的计数高于某个值的条目 具体来说,我有机场、市场和州的表格 AIRPORTS表是关于机场的信息,包括ID(主键)、名称、缩写、MARKET(来自MARKETS表的外键)、STATE(来自STATE表的外键)和CITY字段。像这样:当GROUP BY中已有其他字段时,WHERE大于计数的SQL查询,sql,oracle,join,count,subquery,Sql,Oracle,Join,Count,Subquery,(我非常欢迎更好的标题建议) 我试图在Oracle中编写一个SQL查询,该查询只输出一个字段的计数高于某个值的条目 具体来说,我有机场、市场和州的表格 AIRPORTS表是关于机场的信息,包括ID(主键)、名称、缩写、MARKET(来自MARKETS表的外键)、STATE(来自STATE表的外键)和CITY字段。像这样: 14122 PITTSBURGH INTERNATIONAL PIT 30198 42 PITTSBURGH, PA 14150 PELLSTON REGI
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
30576 Baglung, Nepal
30577 Binghamton, NY
30578 Bruggen, Germany
30579 Bergen, Norway
1 ALABAMA AL
2 ALASKA AK
4 ARIZONA AZ
5 ARKANSAS AR
市场是关于机场可以进入的不同市场的信息。它包含一个ID(主键)和名称字段。像这样:
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
30576 Baglung, Nepal
30577 Binghamton, NY
30578 Bruggen, Germany
30579 Bergen, Norway
1 ALABAMA AL
2 ALASKA AK
4 ARIZONA AZ
5 ARKANSAS AR
各州使用政府的FIPS代码包含有关美国各州的信息。它包含字段FIPS(主键)、名称和缩写(缩写)。像这样:
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
30576 Baglung, Nepal
30577 Binghamton, NY
30578 Bruggen, Germany
30579 Bergen, Norway
1 ALABAMA AL
2 ALASKA AK
4 ARIZONA AZ
5 ARKANSAS AR
我正在尝试编写一个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
但我不确定接下来该怎么办。我相信有更好的方法可以做到这一点
谢谢大家! 你需要使用HAVING clausey,你不需要计算机场的数量,你需要计算每个市场拥有机场的不同州的数量。这不起作用。SQLDeveloper错误:ORA-00933:SQL命令未正确结束00933。00000-“SQL命令未正确结束”*原因:*操作:第2行第16列出现错误我做了一些更改(去掉AS m和AS a,只显式列出表名)。但这只是给了我和以前一样的结果。我现在如何列出这些市场中的所有机场、地铁区域和州?我必须做一些更改(第5行的fib.abbr到states.abbr和第11行的states.fip到states.fips)。但是我得到的输出是不正确的。它给了我洛杉矶和旧金山都会区的所有机场(都在加州),这些机场不应该包括在内,因为都会区不跨越两个州。有什么改变的建议吗?@MikeSherman-我没有发现你想要一个机场位于多个州的市场计数-相应地更新。我已经将它改为使用
>1
而不是>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