当前位置:网站首页>Lintcode logo queries the two nearest saplings

Lintcode logo queries the two nearest saplings

2022-07-06 14:23:00 Lan Zhou Qianfan

 Insert picture description here
 Insert picture description here

 Insert picture description here
The requirement of the question is the distance between the nearest two trees in the query table . And rename the result (shortest_distance)

Answer 1 :( Adopt aggregate function and self connection )

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;

This is a very simple solution , Fields are not complicated .
Attention is paid to small details . Distance , The preconditions for finding the absolute value and the added minimum value are adopted . Then there is self join query . The condition of self connection query is the combination of both id inequality . If they are the same, then the query distance is meaningless . If id The same is comparing itself . What is the analogy between oneself and oneself ?
!= You can also use <> Instead of . It means the same thing

Explanation 2 :( Adopt nested query thinking )

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;

It adopts the thinking of nested query , It's also very easy to understand . The outer layer minimizes the required result , The inner layer calculates the absolute value of the query distance . The processing of the table in memory is to name the table twice , Make it a different watch , Then attach conditions . The last thing to note is cc This is the name of the sub query table , If not , Will report a mistake , This is the grammatical requirement .

Answer 3 :( Another mode of thinking , It's nothing special )

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;

One limitation a.distance>b.distance This replaces abs() Aggregate functions , In this way, you can also get normal results .

Solution 4 :( Superfluous solution , Simple problems complicate )

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;

Don't explain , Because I won't . Solution from netizens . I really hate this solution . Simple problems complicate , Don't do it . ok ! I haven't used this method yet , When you learn it, you can add .

原网站

版权声明
本文为[Lan Zhou Qianfan]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202131401188447.html