如何使用聚合函数在MySQL查询中获取空结果集?

时间:2018-09-30 07:47:50

标签: mysql aggregate-functions

select d.name as 'name', sum(r.distance) as 'sum_distance'
from driver d
       inner join ride r on r.driver_id = d.id
where r.end_time2 > '2018-09-25'
  and r.start_time2 < '2018-09-26';

如果在指定日期之间没有乘车,则此查询将导致

| name | sum_distance |
| ---- | ------------ |
| null |     null     |

但是我希望它返回一个空集。我认为这是因为在查询中使用了sumavgmax之类的聚合函数。 ride-driver是多对一关系。我试图以不同的方式修改查询,但仍然没有返回空集。例如:

select d.name as 'name', sum(r.distance) as 'sum_distance'
from driver d
       inner join ride r on r.driver_id = d.id
where r.end_time2 > '2018-09-25'
  and r.start_time2 < '2018-09-26'
  and d.name IS NOT NULL;

如何解决此MySQL查询?

1 个答案:

答案 0 :(得分:0)

  • 要考虑所有“骑行者”,尽管他们之间没有走过任何距离,但您需要将Left Join表中的driver与第一个表一起使用。
  • 现在,要计算他们行进的总距离,请使用带有Sum()函数的Ifnull()来返回0行进的距离,而不是null。由于左联接,如果在第二个表null中找不到匹配的行,则距离值将显示为ride
  • 此外,在使用诸如Group By之类的聚合函数时,您应该使用Sum

尝试以下操作:

select d.name as 'name', 
       sum(ifnull(r.distance,0)) as 'sum_distance'
from driver d
left join ride r on r.driver_id = d.id
where r.end_time2 > '2018-09-25'
  and r.start_time2 < '2018-09-26' 
group By d.name