为什么“分组方式”不适用于MySQL查询?

为什么“分组方式”不适用于MySQL查询?,mysql,group-by,Mysql,Group By,我在下面的查询中连接了两个表,当我在末尾删除group by时,查询正在工作,但它为我返回了太多的行 第一个优先级是在查询中计算order by distance,随后我只需要具有最小距离的唯一tr_id 使用group by时,出现以下错误: 1064-您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以了解第2行的GROUP BY tr_id LIMIT 0,30使用的正确语法 ORDER BY应在GROUP BY之后指定 PS:我看不到在SELECT中使用聚合函数,因此整个查询

我在下面的查询中连接了两个表,当我在末尾删除group by时,查询正在工作,但它为我返回了太多的行

第一个优先级是在查询中计算order by distance,随后我只需要具有最小距离的唯一tr_id

使用group by时,出现以下错误:

1064-您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以了解第2行的GROUP BY tr_id LIMIT 0,30使用的正确语法

ORDER BY应在GROUP BY之后指定


PS:我看不到在SELECT中使用聚合函数,因此整个查询看起来有点混乱

HAVING子句必须位于任何GROUP BY子句之后,因此您的查询必须是:-

SELECT op.operatorid AS tr_id, de.latitude AS
tolatitude, de.longitude AS tolongitude, de.surname AS tosurname,
de.firstname AS tofirstname, de.did AS to_id,
de.tzz AS tmzz, 
op.bkk AS tobkk, 
( 3959 * acos( cos( radians(52.524368165134284) ) * cos( radians(
de.latitude )
) * cos( radians( de.longitude) - radians(13.410530090332031) ) + sin(
radians(52.524368165134284) ) * sin( radians( de.latitude ) ) ) ) 
AS distance 
FROM de 
INNER JOIN op ON de.did = op.did 
WHERE de.type='Dutch' AND de.longitude > 11.6118868785
AND de.longitude < 15.2091733022 AND de.latitude > 50.7257249533
AND de.latitude < 54.323011377  
GROUP BY tr_id having distance < 200
ORDER BY distance

@BastiaanWW:然后用新版本更新你的问题。顺便说一句,我看到LIMIT子句有错误,但不是在查询中,我仍然没有看到LIMIT。没有限制的查询无法显示error@zerkms查询中没有限制,但我在phpmyadmin中运行了查询,其中显示了第0,30行,我想这就是为什么它显示在错误消息中的原因,非常感谢user1163513!完美
SELECT op.operatorid AS tr_id, de.latitude AS
tolatitude, de.longitude AS tolongitude, de.surname AS tosurname,
de.firstname AS tofirstname, de.did AS to_id,
de.tzz AS tmzz, 
op.bkk AS tobkk, 
( 3959 * acos( cos( radians(52.524368165134284) ) * cos( radians(
de.latitude )
) * cos( radians( de.longitude) - radians(13.410530090332031) ) + sin(
radians(52.524368165134284) ) * sin( radians( de.latitude ) ) ) ) 
AS distance 
FROM de 
INNER JOIN op ON de.did = op.did 
WHERE de.type='Dutch' AND de.longitude > 11.6118868785
AND de.longitude < 15.2091733022 AND de.latitude > 50.7257249533
AND de.latitude < 54.323011377  
GROUP BY tr_id having distance < 200
ORDER BY distance