首页 > 解决方案 > 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 开发人员

标签: sqloracleoracle-sqldeveloper

解决方案


将条件移至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 中尤为重要,因为日期可以包含时间组件,即使您在查询表时看不到它。此版本对于带有或不带有时间组件的数据都是安全的。


推荐阅读