2012-07-27 140 views
-1

我在MySQL数据库的SQL语句:SQL GROUP BY和民在MySQL

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 
+0

重复的http:/ /stackoverflow.com/questions/11683712/sql-group-by-and-min – Yaroslav 2012-07-27 08:32:32

+0

真的吗?选择代码,距离地点的距离;显示 输出? – Nagri 2012-07-27 08:33:52

+0

@hussainnaghri,不知道你在说什么 – cdub 2012-07-27 08:36:03

回答

0
SELECT code, min(distance), location 
GROUP BY code,location 
    HAVING distance =min(distance) 
+0

如果2个代码具有完全相同的位置,我需要所有的代码呢? – cdub 2012-07-27 08:33:23

+0

这将导致错误。您需要在group by子句中包含distinace,它会给出不同的结果 – Madhivanan 2012-07-27 08:40:28

+0

这不能正常工作 – cdub 2012-07-27 08:51:23

0

试试这个:

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 
0

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

+0

nope这不起作用,您仍然可以获取不匹配最小距离的位置 – cdub 2012-07-27 22:08:29