SQL实现往返航班新增反向行统计各航线航班数量的方法
解决方案
你需要的行程拆分效果可以通过UNION ALL拼接两部分查询结果实现,通用SQL写法如下:
-- 替换flights为你的实际表名 SELECT source_id, destination_id, date, trip_type FROM flights UNION ALL SELECT destination_id AS source_id, source_id AS destination_id, date, trip_type FROM flights WHERE LOWER(trip_type) = 'roundtrip';
逻辑说明
- 第一段查询直接读取原表的所有原始记录,保留所有单程行程、往返行程的去程记录
- 第二段查询仅筛选往返行程,将
source_id和destination_id的取值互换,生成对应返程记录 - 用
LOWER()处理trip_type是为了兼容字段值大小写不一致的情况,避免漏匹配 UNION ALL直接拼接两段结果,不会执行额外去重操作,符合你的需求
航线统计简化方案
如果你不需要生成中间转换表,可以直接一步完成航线数量统计:
-- 替换flights为你的实际表名 SELECT CONCAT(source_id, '-', destination_id) AS route, COUNT(*) AS total_trips FROM ( SELECT source_id, destination_id FROM flights UNION ALL SELECT destination_id AS source_id, source_id AS destination_id FROM flights WHERE LOWER(trip_type) = 'roundtrip' ) AS all_trips GROUP BY route;
内容的提问来源于stack exchange,提问作者Cynthia Suprihanta
相关产品推荐
相关产品推荐

