以MICROSOFT为基准点计算公司距离并新增列的SQL查询求助
解决方案
原表结构与数据
| COMPANY | pointX | pointY |
|---|---|---|
| MICROSOFT | 12.434 | 76.810 |
| AMAZON | 1.779 | 290.122 |
| APPLE | 601.840 | 333.910 |
需求说明
将MICROSOFT的坐标设为基准点,计算各公司与该基准点的欧几里得距离,并将结果作为新列添加到查询结果中。
SQL 查询语句
方法1:子查询获取基准点坐标
SELECT t.COMPANY, t.pointX, t.pointY, -- 欧几里得距离公式:√[(x1-x0)² + (y1-y0)²] ROUND( SQRT( POWER(t.pointX - (SELECT pointX FROM myTable WHERE COMPANY = 'MICROSOFT'), 2) + POWER(t.pointY - (SELECT pointY FROM myTable WHERE COMPANY = 'MICROSOFT'), 2) ), 3 -- 保留3位小数,可按需调整 ) AS distance_from_microsoft FROM myTable t;
方法2:CROSS JOIN关联基准点(性能更优)
如果担心子查询重复执行,可通过CROSS JOIN一次性获取基准点数据:
SELECT t.COMPANY, t.pointX, t.pointY, ROUND( SQRT( POWER(t.pointX - m.pointX, 2) + POWER(t.pointY - m.pointY, 2) ), 3 ) AS distance_from_microsoft FROM myTable t CROSS JOIN myTable m WHERE m.COMPANY = 'MICROSOFT';
查询结果示例
| COMPANY | pointX | pointY | distance_from_microsoft |
|---|---|---|---|
| MICROSOFT | 12.434 | 76.810 | 0.000 |
| AMAZON | 1.779 | 290.122 | 214.217 |
| APPLE | 601.840 | 333.910 | 654.678 |
说明
- 欧几里得距离是平面坐标系中两点间的直线距离公式,适配本题的二维坐标计算场景。
ROUND()函数用于控制结果小数位数,可根据需求修改第二个参数。- 两种方法输出结果一致,CROSS JOIN在数据量较大时性能更稳定,因为仅查询一次基准点数据。
内容的提问来源于stack exchange,提问作者MarcelloWrites
相关产品推荐
相关产品推荐

