sql - sql查询显示那些为0的
问题描述
我必须显示 2019 年 1 月的司机和旅行人数。我还需要显示 2019 年 1 月旅行次数为 0 的人。下面是查询,但它没有显示 2019 年 1 月旅行次数为 0 的人。
select d.driver_id, count (t.trip_id)
from drivers d left join TRIPS t on t.DRIVER_ID = d.DRIVER_ID
left join TRIPS_PICKUP tp on tp.DESTINATION_ID = t.DESTINATION_ID
left join TRIP_ADDRESS ta on tp.DESTINATION_ID = ta.DESTINATION_ID
where t.TRIP_DATE>=to_date('2019/01/01','yyyy/mm/dd') and
t.TRIP_DATE<=TO_DATE('2019/01/31','yyyy/mm/dd')
group by d.DRIVER_ID
我认为-where-有问题,但我找不到。我正在使用 oracle sql 开发人员
解决方案
将条件移至on
子句并使用日期文字:
select d.driver_id, count (t.trip_id)
from drivers d left join
TRIPS t
on t.DRIVER_ID = d.DRIVER_ID and
t.TRIP_DATE >= date '2019-01-01' and
t.TRIP_DATE < date '2019-02-01' left join
TRIPS_PICKUP tp
on tp.DESTINATION_ID = t.DESTINATION_ID left join
TRIP_ADDRESS ta
on tp.DESTINATION_ID = ta.DESTINATION_ID
group by d.DRIVER_ID;
请注意,我更改了日期比较的上限——小于一月一日。这在 Oracle 中尤为重要,因为日期可以包含时间组件,即使您在查询表时看不到它。此版本对于带有或不带有时间组件的数据都是安全的。
推荐阅读
- oracle - Oracle sql如何获取两个日期之间的开始和结束日期
- c# - 组合多个Where时如何格式化linq以用OR替换AND
- javascript - 多个 ID 下的嵌套 PUT
- vba - 将外出约会添加到选定的日期
- dynamics-crm - 如何为用户(systemuser)的每次登录创建地理日志实体?
- python - 在 Python 中确定每天每件商品的平均订购数量的最有效方法
- python - 如何检查对象是否是方法定义?
- amazon-web-services - Cloudformation 从参数中删除破折号
- php - 如何使用 php 在 SQLite 表中插入数据?
- image - 如果我用画布多次镜像图像,为什么图像会失去质量?