SQL聚合函数曼哈顿距离查询求助:Hackerspace求解遇阻
解决STATION表两点曼哈顿距离计算问题
别急,我来帮你搞定这个曼哈顿距离的计算问题!首先先明确曼哈顿距离的公式:对于两点P1(a,b)和P2(c,d),曼哈顿距离就是**|c - a| + |d - b|**,对应到你的需求里就是:
- a = STATION表中最小的LAT_N
- b = STATION表中最小的LONG_W
- c = STATION表中最大的LAT_N
- d = STATION表中最大的LONG_W
所以对应的SQL查询应该是这样的:
SELECT ABS(MAX(LAT_N) - MIN(LAT_N)) + ABS(MAX(LONG_W) - MIN(LONG_W)) AS manhattan_distance FROM STATION;
为什么你之前的方案可能无效?
我猜你可能遇到这几个容易踩的坑:
- 遗漏绝对值处理:虽然纬度的最大值肯定大于最小值,但经度可能存储负数(比如西经数值),直接做减法会得到负数,加绝对值才能保证结果是正的距离值。
- 数据精度要求没满足:如果Hackerspace的题目要求结果保留特定小数位数,比如4位,你可以调整成带ROUND函数的版本:
SELECT ROUND(ABS(MAX(LAT_N) - MIN(LAT_N)) + ABS(MAX(LONG_W) - MIN(LONG_W)), 4) AS manhattan_distance FROM STATION; - 字段/表名拼写错误:确认下是不是把
LAT_N写成LATN,或者LONG_W写成LONGW了,这类细节错误很容易被忽略。
是不是平台Bug?
一般来说这种基础聚合函数+绝对值函数的组合不会是平台Bug,大概率是操作细节没注意到。你可以先试试上面的基础版本,如果还是不行,再检查下平台对SQL函数的特殊要求(比如极少数平台会用ABSVAL()替代ABS(),但主流环境都是ABS())。
内容的提问来源于stack exchange,提问作者Johnathan
相关产品推荐
相关产品推荐

