SQL技术求助:获取航班延误超1小时占比TOP3航空公司
获取延误超1小时航班占比TOP3航空公司的正确SQL实现
原代码的问题
- 错误计算了延误时长的占比,而非需求要求的延误航班数的占比
- 混用
GROUP BY与窗口函数SUM() OVER(),语法逻辑冲突(GROUP BY后无法直接引用未聚合的ARR_DELAY字段)
正确SQL实现
SELECT AIRLINE_CODE, -- 计算延误超1小时的航班占比,保留两位小数 ROUND(100.0 * COUNT(CASE WHEN ARR_DELAY > 60 THEN 1 END) / COUNT(*), 2) AS delay_over_1h_ratio FROM ninteen_Flights GROUP BY AIRLINE_CODE -- 按占比降序排序 ORDER BY delay_over_1h_ratio DESC -- 取TOP3航空公司 LIMIT 3;
逻辑说明
COUNT(CASE WHEN ARR_DELAY > 60 THEN 1 END):统计每个航空公司中延误时长超过60分钟的航班数量(不满足条件的记录会被COUNT忽略)COUNT(*):统计每个航空公司的总航班数100.0 * ... / ...:用浮点型数值触发浮点运算,避免整数除法导致的精度丢失,将比例转换为百分比ROUND(..., 2):将结果保留两位小数,提升可读性ORDER BY ... DESC:按占比从高到低排序LIMIT 3:筛选出排名前3的航空公司
内容的提问来源于stack exchange,提问作者U.P
相关产品推荐
相关产品推荐

