0 0

昨天被人问了个SQL的问题,实在想不出答案10

昨天一朋友问我,有一数据表,存储的是很多个坐标点,也就是他们的x和y,例如:
id, X, Y
1, 0, 0
2, 2, 3
3,10,-1

请听题,给定一个坐标(x,y)和一个半径r,如何从数据表中获得这个圆内的所有点?
我想了半天,只能考虑先选出这个圆外切的正方形内所有的点,然后在逐个计算这些点距离(x,y)的长度是否小于r

这个办法比较笨,不知道有没有好的方案呢?
问题补充
hahalizx 写道
应该不难吧,先选X,用给定的X减去记录中的X,然后取绝对值,比R小或等的符合,然后是Y,再把那两个条件结合起来


这样选出来的是个矩形吧
问题补充
Lucas Lee 写道
buaawhl 写道
select * from t
where (X - cx) ^2 + (Y - cy) ^2 < R ^ 2

到圆心的距离小于半径,就在圆内。
两点之间的距离公式,应该就是上面写的。凭印象。


这个是基本解法。
但这需要扫描表中所有记录。
如要提高性能,可以加入冗余条件,它可以利用索引减少目标范围:
select * from t
where (X - cx) ^2 + (Y - cy) ^2 < R ^ 2
and X<cx+r and="" x="">cx-R
and Y<cy+r and="" y="">cy-R
这样可以利用X和Y上的索引。


是的,应该如此。
如果直接算两点距离的话,全表扫描逐条运算,查询速度很慢(mysql里面试的,10万左右的数据)。所以我才打算先选出边长为2r的正方形,查询快很多,然后交给程序过滤多余的记录。
如果只说SQL,老兄的方法挺好的。简单的条件应该放到前面去
2009年1月15日 00:17

10个答案 按时间排序 按投票排序

0 0

采纳的答案

buaawhl 写道
select * from t
where (X - cx) ^2 + (Y - cy) ^2 < R ^ 2

到圆心的距离小于半径,就在圆内。
两点之间的距离公式,应该就是上面写的。凭印象。


这个是基本解法。
但这需要扫描表中所有记录。
如要提高性能,可以加入冗余条件,它可以利用索引减少目标范围:
select * from t
where (X - cx) ^2 + (Y - cy) ^2 < R ^ 2
and X<cx+R and X>cx-R
and Y<cy+R and Y>cy-R
这样可以利用X和Y上的索引。

2009年1月15日 00:18
0 0

这是数学题目在程序中的实现,可以直接写SQL语句,也可以用其他的语言来实现

2009年1月15日 10:21
0 0

radar 写道
如果是多边形呢?
不是一个圆


推荐用SQL限定范围,用程序(如JAVA)去实现算法。形状便不是问题了

2009年1月15日 00:18
0 0

这是要得一个矩阵吗?

2009年1月15日 00:18
0 0

如果是多边形呢?
不是一个圆

2009年1月15日 00:18
0 0

Lucas Lee 写道
buaawhl 写道
select * from t
where (X - cx) ^2 + (Y - cy) ^2 < R ^ 2

到圆心的距离小于半径,就在圆内。
两点之间的距离公式,应该就是上面写的。凭印象。


这个是基本解法。
但这需要扫描表中所有记录。
如要提高性能,可以加入冗余条件,它可以利用索引减少目标范围:
select * from t
where (X - cx) ^2 + (Y - cy) ^2 < R ^ 2
and X<cx+R and X>cx-R
and Y<cy+R and Y>cy-R
这样可以利用X和Y上的索引。


Agree. Right.

应该尽量多加限制条件。简单判断条件可以放在前面。

2009年1月15日 00:18
0 0

bromon 写道
hahalizx 写道
应该不难吧,先选X,用给定的X减去记录中的X,然后取绝对值,比R小或等的符合,然后是Y,再把那两个条件结合起来


这样选出来的是个矩形吧

不会是矩形,看来你几何不是很过关

2009年1月15日 00:18
0 0

select * from table t where abs(t.X-x)<=r and abs(t.Y-y)<=r;

Oracle 好像没有 <=这个运算符的,那就自己加工一下了

2009年1月15日 00:18
0 0

select * from t
where (X - cx) ^2 + (Y - cy) ^2 < R ^ 2

到圆心的距离小于半径,就在圆内。
两点之间的距离公式,应该就是上面写的。凭印象。

2009年1月15日 00:18
0 0

应该不难吧,先选X,用给定的X减去记录中的X,然后取绝对值,比R小或等的符合,然后是Y,再把那两个条件结合起来

2009年1月15日 00:17

相关推荐

    安装SQL SERVER2000弹不出安装界面

    综上所述,解决“安装SQL Server 2000弹不出安装界面”的问题需要多方面的排查和尝试,包括检查系统环境、运行兼容模式、清理安装残留、确保正确顺序以及借助日志记录进行故障排除。对于初学者来说,理解这些步骤和...

    SQL的一些练习题答案

    SQL的一些练习题答案SQL的一些练习题答案SQL的一些练习题答案SQL的一些练习题答案SQL的一些练习题答案SQL的一些练习题答案SQL的一些练习题答案SQL的一些练习题答案SQL的一些练习题答案SQL的一些练习题答案SQL的一些...

    SQL数据库试题及答案

    2. (分值:1.0 分)安装MS SQL Server 时,系统自动建立几个数据库,其中有一个数据库被删除后,不影响系统的正常运行,这个数据库是()。 A: master 数据库 B: model 数据库 C: tempdb 数据库 D: pubs 数据库序号...

    sqlserver+sqlserver面试题及答案

    sqlserver+sqlserver面试题及答案 sqlserver+sqlserver面试题及答案 sqlserver+sqlserver面试题及答案

    SQL争霸赛试题及答案

    总的来说,参与这个SQL争霸赛不仅可以提升SQL技能,还能锻炼问题解决能力,为今后的数据分析和数据库管理职业生涯打下坚实基础。通过反复实践和不断学习,参赛者可以掌握SQL的精髓,更好地应对实际工作中的各种挑战...

    SQL_Server 面试笔试试题及答案

    "SQL Server 面试笔试试题及答案" 本资源摘要提供了 SQL Server 面试笔试试题及答案,涵盖了数据库管理、数据模型、数据结构、数据库优化、SQL 语言等多方面的知识点。通过本资源,读者可以快速掌握 SQL Server 的...

    SQL-Server笔试题含答案

    SQL Server笔试题含答案 本资源是SQL Server笔试题含答案,涵盖了T-SQL语言相关的知识点。总共包括13道笔试题,涵盖了SQL Server中的多对多映射关系、事务、视图、局部变量、存储过程、索引等知识点。 1. SQL ...

    几个SQL面试题及答案.sql

    几个SQL面试题及答案.sql

    SQL Server数据库试题,SQL经典面试题及答案

    在SQL Server数据库领域,面试通常会涵盖多个方面,包括但不限于数据查询、表的创建与管理、索引、存储过程、触发器、事务处理、备份与恢复、性能优化以及安全性等。以下是一些基于这些主题的可能面试问题及其答案:...

    SQL Server实验指导 课后答案

    sql server实验指导 第三版 清华大学出版社,马晓梅 课后实验答案

    SQL经典面试题及答案SQL经典面试题及答案

    SQL经典面试题及答案 从给定的文件信息中,我们可以总结出四个重要的SQL知识点: 一、使用GROUP BY语句来统计分类结果 在给定的部分内容中,我们可以看到一个经典的SQL面试题,即如何使用GROUP BY语句来统计分类...

    Sql经典练习题库(附答案)

    ### SQL经典练习题库知识点解析 #### 一、SQL简介及其重要性 SQL(Structured Query Language,结构化查询语言)是一种非过程化的编程语言,它主要用于...这些练习有助于加深对SQL的理解,并提高解决实际问题的能力。

    常见的SQL笔试选择题含答案.docx

    2. **多对多关系**:在数据库设计中,如果一个实体可以对应多个其他实体,同时另一个实体也可以对应多个前一个实体,这种关系被称为多对多关系。例如,储蓄所与储户之间的关系就是多对多,因为一个储户可以在多个...

    springboot+netty+mybatis+sqlserver

    标题 "springboot+netty+mybatis+sqlserver" 涉及到的是一个使用Spring Boot、Netty、MyBatis以及SQL Server构建的项目。这个项目可能是一个高性能、轻量级的网络通信应用,利用Spring Boot的便利性和Netty的高效...

    MySQL SQL语句练习题及答案

    MySQL SQL语句练习题及答案 本资源提供了 MySQL SQL 语句的练习题及答案,涵盖了创建表、插入数据、删除数据、更新数据、查询数据等多方面的知识点。 一、创建表 在 MySQL 中,创建表使用 CREATE TABLE 语句。...

    SQLSERVER数据库面试题及答案

    SQLSERVER 数据库面试题及答案 面对数据库面试时,候选人需要具备扎实的理论基础和实践经验,以下我们将为您提供一些常见的数据库面试题和答案,帮助您更好地准备面试。 1. 使用标准 SQL 嵌套语句查询选修课程名称...

    SQL面试题(很全,带答案)

    根据给定的文件标题、描述、标签以及部分内容,我们可以从中提炼出以下详细的IT知识点,主要聚焦于SQL语言的基础操作及面试常考知识点: ### SQL语言基础分类与功能 #### 数据定义语言(DDL) - `CREATE DATABASE`:...

    SQL数据库应聘人员面试时经常被问的问题.rar

    SQL数据库应聘人员面试时经常被问的问题 目前在职场中很难找到非常合格的数据库开发人员。有人说:“SQL开发是一门语言,它很容易学,但是很难掌握。” 在面试应聘的SQL Server数据库开发人员时,我运用了一套标准的...

    SQL数据库应聘人员面试时经常被问的问题

    本文介绍了一些真正有助于淘汰不合格SQL数据库应聘者的问题。如对象的解释,你希望听到的答案包括这样一些对象:表格、视图、用户定义的函数,以及存储过程;如果他们还能够提到像触发器这样的对象就更好了。如果应聘...

Global site tag (gtag.js) - Google Analytics