mysql - 使用 MySQL GROUP BY 表达式计数时如何包括零

标签 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'];
  }

最佳答案

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

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

关于mysql - 使用 MySQL GROUP BY 表达式计数时如何包括零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6116552/

相关文章:

php - 2 Mysql查询行数和主查询?

php - 如何将 mysql 中的项目回显到 html 表中?

mysql - 查看左侧 4 个表加入分组依据

hadoop - 具有非空列的平均函数 - Hive

sql - 当 PostgreSQL 中特定字段的平均值为空时如何分配零(0)

mysql - SQL : Grouping by column while displaying other column entries

mysql - 尝试更新现有记录 - 出现错误

php - 如何从 MySQL 数据库中回显换行符?

MYSQL - 多个计数语句

oracle - Oracle 中的条件分组依据