SQL查询求助:基于delayedFlights和airport表统计前5个州内航班延误高发州
解决同一州内跨机场延误航班统计问题
你的原始查询无效的核心原因是:delayedFlights表本身没有state字段,也未关联存储州信息的airport表,WHERE state = state的条件完全无法获取有效数据。
以下是正确的SQL查询语句及逻辑说明:
SELECT ap_orig.State AS state, COUNT(df.ID_of_Delayed_Flight) AS num_delays FROM delayedFlights df -- 关联出发机场对应的州信息 JOIN airport ap_orig ON df.Orig = ap_orig.airportCode -- 关联到达机场对应的州信息 JOIN airport ap_dest ON df.Dest = ap_dest.airportCode WHERE -- 限定为同一州内的航班 ap_orig.State = ap_dest.State -- 排除同一机场往返的无效数据 AND df.Orig != df.Dest -- 筛选存在到达延误或出发延误的航班 AND (df.ArrDelay > 0 OR df.DepDelay > 0) GROUP BY ap_orig.State ORDER BY num_delays DESC LIMIT 5;
关键逻辑拆解:
- 两次
JOIN操作:分别通过航班的出发机场代码(Orig)和到达机场代码(Dest)关联airport表,获取航班对应的出发州与到达州。 - 三重筛选条件:同时满足同一州内、不同机场间、存在到达/出发延误三个核心统计要求。
- 分组排序:按州分组统计符合条件的延误航班数量,最后按数量降序取前5个州。
内容的提问来源于stack exchange,提问作者Elephants unite
相关产品推荐
相关产品推荐

