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

Posted

技术标签:

【中文标题】在sql查询中计算距离(毕达哥拉斯)和运行计数【英文标题】:Calculating distance (pythagoras) and running count in sql query 【发布时间】:2014-01-08 11:14:24 【问题描述】:

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

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

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/ 按照我们获得的distance 值对population_postcodes 中的邮政编码进行排序,

not sure how to do that step

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

提出的运行计数查询 - 但缺少上述中断条件:

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 表中循环这个查询。

非常感谢您帮助新手!

【问题讨论】:

这是 SQL Server,但它可能会给你一些想法blogs.lessthandot.com/index.php/DataMgmt/DataDesign/… 您使用 MS Access 还是 mysql 作为数据库? 我正在使用 Access,但我认为 sql 查询会相似? 它不会足够相似,例如,当前答案不会在 MS Access 中运行。除非您想要 MySQL 答案,否则最好删除 MySQL 标记。 您能告诉我它有何不同/我如何更正查询吗? 【参考方案1】:

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

【讨论】:

阿德里安非常感谢,我会尝试实现这一点,并让你知道一点。再次感谢您!

以上是关于在sql查询中计算距离(毕达哥拉斯)和运行计数的主要内容,如果未能解决你的问题,请参考以下文章

毕达哥拉斯定理用于计算两点之间的距离。序言

机器学习 - 距离计算

用于计算表中行数的 SQL 查询

基于匹配值的雪花SQL计数和从另一个表求和

尝试在 T-SQL 查询中使用 Levenshtein 距离 - 请帮助优化

如何通过经纬度计算距离来优化 SQL 查询?