在mysql中计算空间距离并按距离排序

vfh0ocws  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(584)

我有3个带有以下字段的表:
组织(组织id、组织名称、位置)
办公室(办公室id、办公室名称、位置、组织id)
项目(项目id、项目名称、位置)
我想找到离某个项目最近的办公室

  1. SELECT office.office_name, org.org_name,
  2. st_distance_sphere(office.location, project.location)*0.001 as
  3. distance
  4. FROM office JOIN org JOIN project
  5. WHERE office.org_id=org.org_id AND
  6. project.project_id=7
  7. ORDER BY distance asc;

上面的查询工作,并给我最接近的办公室到一个项目,但我需要得到每个组织只有一个最近的办公室
因此,我尝试使用以下半连接

  1. SELECT office.office_name, org.org_name,
  2. st_distance_sphere(office.location, project.location)*0.001 as
  3. distance
  4. FROM office JOIN org JOIN project
  5. INNER JOIN
  6. ( SELECT org.org_id as orgid1,
  7. min(st_distance_sphere(office.location, project.location)*0.0001) as
  8. distance1
  9. FROM office JOIN org JOIN project
  10. WHERE
  11. office.org_id=org.org_id and project.project_id=7
  12. GROUP BY org.org_id
  13. ) AS t
  14. ON t.orgid1=org.org_id and t.distance1=min(st_distance_sphere(office.location,project.location)*0.001)
  15. WHERE office.org_id=org.org_id AND project.project_id=7 ;

使用这个,我得到以下错误,原因似乎是min(st_distance_sphere)函数。删除它会删除错误,但是我没有得到想要的结果。
错误1111(hy000):组函数的使用无效
我做错什么了?任何想法都非常感谢。谢谢

qcuzuvrc

qcuzuvrc1#

我只需要得到一个最近的办公室每个组织

  1. SELECT
  2. A.office_name, A.org_name, A.distance
  3. FROM
  4. (SELECT
  5. office.office_name,
  6. org.org_name,
  7. st_distance_sphere(office.location, project.location)*0.001 as distance
  8. FROM office JOIN org JOIN project
  9. WHERE office.org_id=org.org_id AND
  10. project.project_id=7) A
  11. JOIN
  12. (SELECT
  13. org.org_name,
  14. MIN(st_distance_sphere(office.location, project.location)*0.001) as distance
  15. FROM office JOIN org JOIN project
  16. WHERE office.org_id=org.org_id AND
  17. project.project_id=7
  18. GROUP BY org.org_name) B
  19. ON A.org_name=B.org_name AND A.distance=B.distance
  20. ORDER BY A.distance ASC;
展开查看全部

相关问题