如何用多表SELECT查询统计指定用户指定时段派送包裹总数
解决指定用户派送包裹数量统计的SQL查询问题
没问题,我来帮你搞定这个统计需求!咱们需要把三张表关联起来,精准筛选出John的派送数据并计算总数。
核心思路
- 通过
orders_drivers表关联用户(user_id=1)和他使用的所有车牌(plate_id) - 再关联
orders表,获取这些车牌在指定日期范围内的派送记录 - 对
package_amount求和得到总包裹数
完整SQL查询语句
SELECT SUM(o.package_amount) AS total_delivered_packages FROM orders_drivers od JOIN orders o ON od.plate_id = o.plate_id -- 如果不需要用到plates表的字段,其实可以不用关联它;如果需要显示车牌名称,可以加上下面这行 -- JOIN plates p ON od.plate_id = p.plate_id WHERE od.user_id = 1 AND o.delivery_date BETWEEN '2018-02-01' AND '2018-02-28';
语句说明
JOIN orders_drivers od ON od.plate_id = o.plate_id:把用户和他驾驶的车辆绑定,确保只统计John使用过的车辆的派送记录WHERE od.user_id = 1:锁定目标用户Johno.delivery_date BETWEEN '2018-02-01' AND '2018-02-28':筛选2018年2月的派送数据SUM(o.package_amount):对符合条件的所有包裹数量求和,并用AS给结果起一个清晰的别名
如果需要同时显示对应的车牌名称,可以取消注释JOIN plates那一行,然后在SELECT里加上p.plate_name,比如:
SELECT p.plate_name, SUM(o.package_amount) AS total_delivered_packages FROM orders_drivers od JOIN orders o ON od.plate_id = o.plate_id JOIN plates p ON od.plate_id = p.plate_id WHERE od.user_id = 1 AND o.delivery_date BETWEEN '2018-02-01' AND '2018-02-28' GROUP BY p.plate_name;
这样就能看到John每辆车在2月的派送包裹数啦。
内容的提问来源于stack exchange,提问作者hatasu
相关产品推荐
相关产品推荐

