使用MySQL GROUP BY表达式计数时如何包含零

时间:2011-05-24 20:37:39

标签: mysql aggregate-functions

我想计算过去一个月每天发生的次数事件,但是当没有找到任何事件时也包括零次。那可能吗?

这是我从...开始......

SELECT COUNT(*) AS count, 
DATE(usage_time_local) AS d 
FROM usages 
WHERE user_id=136 
AND DATE(usage_time_local) >= DATE('2011-04-24') 
AND DATE(usage_time_local) <= DATE('2011-05-24') 
GROUP BY DATE(usage_time_local);

更新:鉴于答案,我通过初始化循环然后填写详细信息来实现代码解决方案。

  $dailyCount = array();
  for( $i=1; $i<=30; $i++ ) {
      $day = date('Y-m-d',(time()-($i*24*60*60)));
      $dailyCount[$day] = 0;
  }
  foreach( $statement as $row ) {
    $dailyCount[$row['d']] = $row['count'];
  }

1 个答案:

答案 0 :(得分:8)

您不能使用标准SQL查询执行此操作 - 您将尝试对表中不存在的日期进行分组。

标准解决方法是创建一个临时表,其中包含按顺序排列的日期范围,没有间隙,将其连接到您的表并像往常一样进行计数/聚合。