【问题标题】:How to find the povinces where the longest Road of Ecuador begins and ends? (SQL)如何找到厄瓜多尔最长公路起点和终点的省份? (SQL)
【发布时间】:2020-10-27 20:17:14
【问题描述】:

对于一个项目,我必须在厄瓜多尔找到最长的道路 (codigo),并使用 SQL 显示它开始和结束的省份 (provincia)。数据以表格形式提供(见图)。每行代表一个路段并具有一个几何图形(geom 列)。当然,道路是由许多具有相同名称(codigo)的路段组成的。

我已经有以下代码,它返回最长的道路和公里数:

select v.codigo as road_name, 
sum(ST_Length(geom)/1000) as length_km, v.provincia as province  
from vias v
group by v.codigo
order by length_km desc
limit 1

我仍在苦苦寻找如何到达这条最长道路起点和终点的省份(省)。有人知道怎么写代码吗?

【问题讨论】:

  • 该代码是否真的有效,因为另一个非聚合列 v.provincia 不在 GROUP BY 中。也许它在功能上依赖于v.codigo?但是一个省不会有很多路吗?
  • 是的!我检查并上传了我试图达到结果的代码,但它不起作用。在下方,您可以找到有效的代码并生成最长道路的名称和以公里为单位的长度。 select codigo as road_name,sum(ST_Length(geom)/1000) as length_km from vias v group by v.codigo order by length_km desc limit 1

标签: sql postgresql postgis


【解决方案1】:

这是一种提取与最长道路对应的行的方法。图像中显示的架构中没有任何信息可以很好地指示起点和起点省(至少,我对数据集的理解不够好)。这是一种使用 CTE(通用表表达式)的基于集合的方法。

with TotalLengthOfRoads
as (select  codigo as road_name, 
            sum(ST_Length(geom)/1000) as total_length_km  
    from vias 
    group by codigo)
select v.*
from vias as v
inner join TotalLengthOfRoads as tlor
    on v.codigo = tlor.codigo
    and tlor.total_length_km = (select max(length_km) 
                                from TotalLengthOfRoads);

【讨论】:

  • 谢谢!你是对的,你不知道哪个是起点,哪个是终点。我只需要2个省,顺序不重要。
  • 是否可以共享整个架构和指示城市是道路起点/起点还是终点的列/字段?我有一个这样的字段,那么上面语句末尾的限制子句(where)会得到想要的结果。
猜你喜欢
  • 2021-09-19
  • 1970-01-01
  • 2015-06-06
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
相关资源
最近更新 更多