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;


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


相关文章
|
前端开发
2023Web前端开发八股文&面试题(万字系列)——这篇就够了!
2023Web前端开发八股文&面试题(万字系列)——这篇就够了!
2644 2
|
8月前
|
数据挖掘 API 开发者
深度解析!淘宝商品详情 API 接口的高效调用与实战应用
淘宝商品详情API为开发者提供高效获取商品信息的途径,支持名称、价格、销量等详细数据的提取。接口通过GET/POST请求方式调用,需携带商品ID与授权信息(如AppKey)。其特点包括数据全面、实时性强及安全性高,满足电商应用、数据分析等需求。本文还提供了Python调用示例,涵盖签名生成、参数构建及请求发送全流程,助力开发者快速集成淘宝商品数据至自身系统中。
|
5月前
|
Web App开发 前端开发 关系型数据库
GitHub 2.8k star 开源既封神,“Liquid‑Glass‑React”,让你前端界面瞬间拥有苹果级液态玻璃效果!
Liquid-Glass-React 是一款开源前端组件,旨在将 Apple iOS 26 的“液态玻璃”视觉效果引入 React 应用。凭借逼真折射、多种反射模式、响应式交互及高度可配置性,它已获得 2.8k stars,成为提升 UI 质感的热门工具。
587 0
|
XML Java UED
使用 Spring Boot 实现重试和补偿功能:从理论到实践
【6月更文挑战第17天】在分布式系统中,服务之间的调用可能会因为网络故障、服务器负载等原因偶尔失败。为了提高系统的可靠性和稳定性,我们经常需要实现重试和补偿功能。
730 6
|
11月前
|
前端开发 安全 开发工具
CMS系统是什么?CMS用来做什么的?
CMS是网站开发工具,包括前端模版和后端后台。支持私有化部署,包含页面管理、会员管理、标签管理等。用户无需建站基础和专业知识,即可快速建设和管理网站。大型企业网站、新闻网站等多采用CMS。
683 8
|
网络协议 网络安全
【网络安全 | HTTP】 gopher协议原理、语法及利用总结
【网络安全 | HTTP】 gopher协议原理、语法及利用总结
967 0
|
SQL 数据库 索引
Pandas之DataFrame,快速入门,迅速掌握(三)
Pandas之DataFrame,快速入门,迅速掌握(三)
300 0
|
算法 前端开发
技术好文共享:磁力链接的BASE32编码向HEX编码的转换
技术好文共享:磁力链接的BASE32编码向HEX编码的转换
1933 0
|
存储 Linux 网络架构
如何在Linux上添加路由?
【4月更文挑战第8天】
399 2
如何在Linux上添加路由?