表orders包含如下字段: id: id order_id:订单id customer_id: 客户id courier_id: 派送员id acceptance_latitude: 派送员接单纬度 acceptance_longitude:派送员接单经度 表order_points包含如下字段: id:id order_id:订单id point_type:停留点类型,包括“DELIVERY”和“PICKUP”类型 longitude:经度 latitude:纬度 编写SQL查询,计算每个订单派送员接单位置和取货位置(PICKUP)的距离,和取货位置到配送位置(DELIVERY)的距离,结果返回order_id,pickup_distance,delivery_distance。
时间: 2024-02-19 22:59:12 浏览: 128
下面是SQL查询语句:
```
SELECT o.order_id AS order_id,
ROUND(ST_DistanceSphere(op.longitude, op.latitude, o.acceptance_longitude, o.acceptance_latitude), 2) AS pickup_distance,
ROUND(ST_DistanceSphere(op.longitude, op.latitude, od.longitude, od.latitude), 2) AS delivery_distance
FROM orders o
INNER JOIN order_points op ON o.order_id = op.order_id
INNER JOIN order_points od ON o.order_id = od.order_id
WHERE op.point_type = 'PICKUP' AND od.point_type = 'DELIVERY';
```
解释:
1. 使用 INNER JOIN 连接 orders 表、order_points 表两次,以获取订单信息、取货点信息和配送点信息。
2. 在 WHERE 子句中筛选出取货点和配送点的记录。
3. 使用 ST_DistanceSphere 函数计算取货点到派送员接单位置的距离和取货点到配送点的距离,并使用 ROUND 函数将结果保留两位小数。
4. 返回 order_id、pickup_distance 和 delivery_distance 列。
阅读全文