【问题标题】:SQL Group By and Min in MySQLMySQL中的SQL Group By和Min
【发布时间】:2012-07-25 22:01:40
【问题描述】:

我在 MySQL DB 中有以下 SQL:

select code, distance from locations;    

输出如下:

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

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

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

【问题讨论】:

标签: mysql sql group-by min


【解决方案1】:

试试这个:

select L.* from (
    SELECT code, min(distance) as min_distance 
    from places
    GROUP BY code)a
join places L
on L.CODE=a.CODE
and L.DISTANCE=a.min_distance 

【讨论】:

    【解决方案2】:
      SELECT code, min(distance), location
    GROUP BY code,location
      HAVING distance =min(distance)
    

    【讨论】:

    • 如果两个代码的位置完全相同,因为我也需要所有代码?
    • 这会导致错误。您需要在 group by 子句中包含区别,这将产生不同的结果
    【解决方案3】:

    SELECT code, distance, location FROM locations GROUP BY code HAVING distance > 0
    ORDER BY distance ASC LIMIT 1

    【讨论】:

    • 不,这不起作用,您仍然可以获得与最小距离不匹配的位置,因为 group by
    猜你喜欢
    • 2012-07-25
    • 2013-04-06
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 2020-12-29
    • 2017-12-07
    • 2020-07-23
    • 1970-01-01
    相关资源
    最近更新 更多