一尘不染

SQL分组依据和最小值(MySQL)

mysql

我有以下SQL:

select code, distance from places;

输出如下:

CODE    DISTANCE            LOCATION
106     386.895834130068    New York, NY
80      2116.6747774121     Washington, DC
80      2117.61925131453    Alexandria, VA
106     2563.46708627407    Charlotte, NC

我希望能够仅获取一个代码并获得最近的距离。所以我希望它返回这个:

CODE    DISTANCE            LOCATION
106     386.895834130068    New York, NY
80      2116.6747774121     Washington, DC

我最初有这样的东西:

SELECT code, min(distance), location
GROUP BY code
HAVING distance > 0 
ORDER BY distance ASC

如果我不想获得与最小距离相关联的正确位置,则最小值显示效果很好。如何获取最小距离(和距离)以及正确的位置(取决于表格中插入内容的顺序,有时您可能会得到纽约距离,但夏洛特位于“位置”)。


阅读 383

收藏
2020-05-17

共1个答案

一尘不染

为了获得正确的关联位置,您需要加入一个子选择,该子选择在外部主表中的距离与子选择中得出的最小距离相匹配的情况下,获得每个代码的最小距离。

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
2020-05-17