Sql 使用GTFS馈送检测停止类型
我有一个GTFS提要,我正在尝试使用SQL检测stoptype(Sql 使用GTFS馈送检测停止类型,sql,postgresql,gtfs,Sql,Postgresql,Gtfs,我有一个GTFS提要,我正在尝试使用SQL检测stoptype(bus,tram或multiple)。为此,我必须获取每个站点的所有路线,并比较包含路线类型信息的route.route\u type字段(0-tram,3-bus) 我的问题是: SELECT stop.stop_id, route.route_type from stop INNER JOIN stop_time on stop_time.stop_id = stop.stop_id INNER JOIN trip on tri
bus
,tram
或multiple
)。为此,我必须获取每个站点的所有路线,并比较包含路线类型信息的route.route\u type
字段(0
-tram,3
-bus)
我的问题是:
SELECT stop.stop_id, route.route_type from stop
INNER JOIN stop_time on stop_time.stop_id = stop.stop_id
INNER JOIN trip on trip.trip_id = stop_time.trip_id
INNER JOIN route on route.route_id = trip.route_id
GROUP BY stop.stop_id, route.route_type
ORDER BY stop.stop_id, route.route_type
此查询返回:
stop_id,route_type
1,0
1,3
2,0
3,3
这意味着stop_id=1具有:
- 巴士路线,
- 电车路线
stop_id,stop_type
1,multiple
2,tram
3,bus
或者更简单的办法是只修改这些有公共汽车和电车路线的车站。所以应该是这样的:
stop_id,stop_type
1,-1
2,0
3,3
如何达到这个效果?我不确定,但我认为我应该计算每个站点id的行数,然后以某种方式修改结果,但我不知道如何进行修改。您可以检查每个
站点id的不同路由类型的计数,如果它大于1,则输出多个,否则使用MAX
(或MIN
,这没关系,因为只有一个不同的值,但我们必须使用聚合函数以避免违反分组规则)的route\u type
将stop\u type
设置为bus
或tram
:
SELECT stop.stop_id,
CASE WHEN COUNT(DISTINCT route.route_type) > 1 THEN 'multiple'
WHEN MAX(route.route_type) = 0 THEN 'tram'
ELSE 'bus'
END AS stop_type
FROM stop
INNER JOIN stop_time on stop_time.stop_id = stop.stop_id
INNER JOIN trip on trip.trip_id = stop_time.trip_id
INNER JOIN route on route.route_id = trip.route_id
GROUP BY stop.stop_id
ORDER BY stop.stop_id
您可以检查每个站点id
的不同路由类型的计数
,如果大于1,则输出多个
,否则使用最大值
(或MIN
,这没关系,因为只有一个不同的值,但我们必须使用聚合函数以避免违反分组规则)的route\u type
将stop\u type
设置为bus
或tram
:
SELECT stop.stop_id,
CASE WHEN COUNT(DISTINCT route.route_type) > 1 THEN 'multiple'
WHEN MAX(route.route_type) = 0 THEN 'tram'
ELSE 'bus'
END AS stop_type
FROM stop
INNER JOIN stop_time on stop_time.stop_id = stop.stop_id
INNER JOIN trip on trip.trip_id = stop_time.trip_id
INNER JOIN route on route.route_id = trip.route_id
GROUP BY stop.stop_id
ORDER BY stop.stop_id
嗯,它到处都返回multiple
。但是,当我将count(route.route\u type)
修改为count(distinct route.route\u type)时
它就像一个符咒!谢谢你!@Marcin对此表示抱歉-从你问题中的数据中不清楚可能有多个类似的值。我很高兴你找到了它。我已经更新了答案以供将来参考。嗯,它到处返回多个
。但是,当我修改计数(route.route\u type)时
tocount(distinct route.route\u type)
它就像一个符咒一样工作!谢谢!@Marcin对此表示抱歉-从您问题中的数据中不清楚可能有多个类似的值。我很高兴您找到了它。我已经更新了答案以供将来参考。