SQL Group By和min(MySQL)

cdu*_*dub 5 mysql sql group-by min

我有以下SQL:

select code, distance from places;    
Run Code Online (Sandbox Code Playgroud)

输出如下:

CODE    DISTANCE            LOCATION
106     386.895834130068    New York, NY
80      2116.6747774121     Washington, DC
80      2117.61925131453    Alexandria, VA
106     2563.46708627407    Charlotte, NC
Run Code Online (Sandbox Code Playgroud)

我希望能够得到一个代码和最近的距离.所以我希望它返回这个:

CODE    DISTANCE            LOCATION
106     386.895834130068    New York, NY
80      2116.6747774121     Washington, DC
Run Code Online (Sandbox Code Playgroud)

我原来有这样的事情:

SELECT code, min(distance), location
GROUP BY code
HAVING distance > 0 
ORDER BY distance ASC
Run Code Online (Sandbox Code Playgroud)

如果我不想获得与最小距离相关联的正确位置,则min工作正常.我如何获得最小(距离)和正确的位置(取决于表中插入的顺序,有时你可能最终得到纽约距离,但位置为夏洛特).

Zan*_*ien 7

要获得正确的关联位置,您需要加入一个子选择,该子选择在外部主表中的距离与子选择中派生的最小距离匹配的条件下获得每个代码的最小距离.

SELECT a.code, a.distance
FROM   places a
INNER JOIN
(
    SELECT   code, MIN(distance) AS mindistance
    FROM     places
    GROUP BY code
) b ON a.code = b.code AND a.distance = b.mindistance
ORDER BY a.distance
Run Code Online (Sandbox Code Playgroud)

  • 使用"边界框"来获得更短的候选列表,然后使用距离函数.这可以让你排除大部分100,000. (2认同)