LintCode-Logo 查询相距最近的两棵树苗

简介: 题目的要求就是查询表中距离最近的两棵树之间的距离。并将结果进行重命名(shortest_distance)题解一:(采用聚合函数和自连接)SELECT MIN(ABS(a.distance - b.distance)) AS shortest_distanceFROM sapling_distances AS aINNER JOIN sapling_distances bON a.id != b.id;


题目的要求就是查询表中距离最近的两棵树之间的距离。并将结果进行重命名(shortest_distance)


题解一:(采用聚合函数和自连接)


SELECT MIN(ABS(a.distance - b.distance)) AS shortest_distance
FROM sapling_distances AS a
INNER JOIN sapling_distances b
ON a.id != b.id;


这是一段非常简单易懂的解法,字段并不复杂。


注意的也就是很小的细节。距离的话,采用了求绝对值和外加最小值前提的条件。然后就是自连接查询。自连接查询的条件就是两者的id不相同。如果相同的那么查询距离就没意义了。如果id相同就是比较的是自身。自身和自身有什么好比的呢?


!= 还可以用<>代替。意思一样


题解二:(采用嵌套查询思维)


SELECT MIN(distance_diff) AS shortest_distance FROM (
    SELECT  abs(b.distance - a.distance) AS distance_diff FROM sapling_distances a, sapling_distances b
    WHERE a.id <> b.id
) cc
HAVING shortest_distance is not null;


采用的是嵌套查询的思维,也是非常好理解的。外层对要求结果求最小值,内层对查询距离求绝对值。内存对表的处理就是两次命名表,使之成为不同名表,然后进行附加条件。最后需要注意的就是cc这个作为子查询表的命名,如果没有的话,会报错,这是语法要求。


题解三:(另一种思维模式,其实没什么特别)


select min(a.distance - b.distance) shortest_distance
from sapling_distances a
    join sapling_distances b on a.distance > b.distance
having shortest_distance is not null;


一个限制条件a.distance>b.distance这样就代替了abs()聚合函数,这样也可以正常得到结果。


题解四:(多此一举的解法,简单问题复杂化)


select min(s2.distance-s1.distance) shortest_distance from
(select distance,@rownum1:=@rownum1+1 r1 
from sapling_distances,(select @rownum1:=0) ra
order by distance) s1,
(select distance,@rownum2:=@rownum2+1 r2 
from sapling_distances,(select @rownum2:=0) rb
order by distance) s2
where s1.r1 = s2.r2-1 having shortest_distance is not null;


不做说明,因为我不会。解法摘自网友。对于这种解法真的感觉深恶痛绝。简单问题复杂化,不可为也。好吧!我还没用过这种方法,等学会了再来补充。


目录
打赏
0
0
0
0
0
分享
相关文章
2023Web前端开发八股文&面试题(万字系列)——这篇就够了!
2023Web前端开发八股文&面试题(万字系列)——这篇就够了!
2170 2
深度解析!淘宝商品详情 API 接口的高效调用与实战应用
淘宝商品详情API为开发者提供高效获取商品信息的途径,支持名称、价格、销量等详细数据的提取。接口通过GET/POST请求方式调用,需携带商品ID与授权信息(如AppKey)。其特点包括数据全面、实时性强及安全性高,满足电商应用、数据分析等需求。本文还提供了Python调用示例,涵盖签名生成、参数构建及请求发送全流程,助力开发者快速集成淘宝商品数据至自身系统中。
在Linux中,有哪些性能调优工具?
在Linux中,有哪些性能调优工具?
什么是聚集索引和非聚集索引?
【8月更文挑战第3天】
5870 6
【Python】已解决:SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFram
【Python】已解决:SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFram
1757 1
Electron Markdown编辑器实战:资源管理器实现
Electron Markdown编辑器实战:资源管理器实现
NumPy 差分、最小公倍数、最大公约数、三角函数详解
NumPy 差分 离散差分意味着相邻元素之间的减法。 例如,对于 [1, 2, 3, 4],离散差分将是 [2-1, 3-2, 4-3] = [1, 1, 1] 要找到离散差分,使用 diff() 函数。
【Python 机器学习专栏】堆叠(Stacking)集成策略详解
【4月更文挑战第30天】堆叠(Stacking)是机器学习中的集成学习策略,通过多层模型组合提升预测性能。该方法包含基础学习器和元学习器两个阶段:基础学习器使用多种模型(如决策树、SVM、神经网络)学习并产生预测;元学习器则利用这些预测结果作为新特征进行学习,生成最终预测。在Python中实现堆叠集成,需划分数据集、训练基础模型、构建新训练集、训练元学习器。堆叠集成的优势在于提高性能和灵活性,但可能增加计算复杂度和过拟合风险。
1422 0
【题解】—— LeetCode一周小结18
【题解】—— LeetCode一周小结18
63 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问