postgresql中的sql问题

SELECT districtid, char_length(districtid) as d_length FROM district
       where ST_Intersects(geometry, ST_GeometryFromText('LINESTRING (119.922 30.526, 120.168 30.596)')) 

查询出来的结果:
图片描述

接下来我怎么将最长length的行过滤出来,这张图片里面是length为9的行。
现在我用的是with语句:

With dis AS
(SELECT districtid, char_length(districtid) as d_length FROM district
       where ST_Intersects(geometry, ST_GeometryFromText('LINESTRING (119.922 30.526, 120.168 30.596)')) )
Select * From dis where d_length=(select max(d_length) from dis);

有没有其他更好的方法?

阅读 2.5k
1 个回答

可以考虑窗口函数dense_rank()

with dis as (
  select districtid, char_length(districtid) as d_length,
         dense_rank() over (order by char_length(districtid)) as dr
  from ...)

select districtid, d_length from dis where dr=1

效率上应该差不多吧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进