计算sql查询中的距离(毕达哥拉斯)和运行计数

时间:2014-01-08 11:14:25

标签: mysql sql database ms-access geolocation

我正在尝试在SQL中构建一个相当复杂的查询,作为一个初学者,我非常感谢一些帮助来构建它。

我正在努力实现以下目标:

population_postcodes table

enter image description here

1 /使用毕达哥拉斯使用笛卡尔纬度和经度坐标计算target_postcodes表中的邮政编码 - 例如E1 1AA - 和population_postcodes表中的所有邮政编码之间的distance

SQRT( POW(MY_Y_AXIS - Y_AXIS, 2) + POW(MY_X_AXIS-X_AXIS, 2) )

2 /创建一个包含distance个值的新列

not sure how to do that step

2-bis /按我们获得的population_postcodes值对distance中的邮政编码进行排序,

not sure how to do that step

3 /从最接近的邮政编码开始,将人口列中的值添加到running_count列 UNTIL running_count> E1 1AA的Number_of_beds

建议查询运行计数 - 但缺少上述违规条件:

SELECT distance, Population,
 (SELECT sum(population_postcodes.Population)) AS Total

FROM population_postcodes
WHERE population_postcodes.distance <= T1.distance) AS Total

FROM population_postcodes AS T1

4 /创建一个包含邮政编码E1 1AA(target_postcode)的新表格,以及最后一个邮政编码的距离值加到我们的运行计数中。

最后,我需要在整个target_postcodes表上循环查询。

非常感谢你帮助新手!

1 个答案:

答案 0 :(得分:0)

1。,2。要将表格放在一起并在它们之间执行操作,您需要使用Join http://dev.mysql.com/doc/refman/5.0/en/join.html 否则你的公式是正确的。要在查询中将其创建为列,只需将其写入投影(选择)部分即可。 例如:

select 
population_postcodes.*, 
target_postcodes.*, 
SQRT( POW(population_postcodes.longitude- target_postcodes.longitude, 2) + POW(population_postcodes.latitude-target_postcodes.latitude, 2) ) as distance
from population_postcodes JOIN target_postcodes

点2之二。以column_name asc / desc的顺序结束 http://dev.mysql.com/doc/refman/5.0/en/sorting-rows.html

要点3.将所有内容写为sub-query,并在顶部查询中仅选择所需内容。另请参阅HAVING http://dev.mysql.com/doc/refman/5.0/en/subqueries.html http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html

第4点。查看创建表格的方法并应用您所接近的内容

create table mytablename
select ... my projection columns
from ...

http://dev.mysql.com/doc/refman/5.1/en/create-table.html