You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL:按空间距离排序后为餐厅生成1-6评分列

问题描述

我有一张包含75条记录的表,其中部分记录类型为attraction(景点),部分为random restaurant(随机餐厅)。我已通过以下SQL语句生成按与“Parade route”路线空间距离升序排序的随机餐厅列表:

SELECT name 
FROM punkte AS p, 
     linien AS l 
WHERE l.route = 'Parade route' 
  AND p.typ = 'Random restaurant' 
ORDER BY ST_Distance(l.wkb_geometry, p.wkb_geometry) ASC

该语句输出为原表的子集。现希望基于此距离排序结果新增一列,为餐厅分配1到6的评分值,请问如何实现?

解决方案(感谢Adrian)

针对需求,可通过窗口函数实现两种场景下的评分分配:

场景1:生成连续排序序号后映射评分

先通过ROW_NUMBER()生成按距离升序的连续序号,后续可根据序号范围手动映射为1-6的评分:

SELECT 
    row_number() over(ORDER BY ST_Distance(l.wkb_geometry, p.wkb_geometry) ASC) AS sort_sequence,
    name 
FROM 
    punkte AS p, 
    linien AS l 
WHERE 
    l.route = 'Parade route' 
    AND p.typ = 'Random restaurant'

场景2:直接分配1-6的分档评分

如果需要将所有餐厅按距离排序后均匀划分为6个等级(距离最近的为1级,最远的为6级),推荐使用NTILE(6)函数,它会自动将排序后的记录均匀分配到6个分组中,每个分组对应1-6的评分:

SELECT 
    ntile(6) over(ORDER BY ST_Distance(l.wkb_geometry, p.wkb_geometry) ASC) AS rating,
    name 
FROM 
    punkte AS p, 
    linien AS l 
WHERE 
    l.route = 'Parade route' 
    AND p.typ = 'Random restaurant'

内容的提问来源于stack exchange,提问作者user21530075

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:33:28